如何知道字符串的大小(以字节为单位)?

use*_*414 88 .net c# string size byte

我想知道我是否能知道stringC#中的字节有多长,有谁知道?

diy*_*iya 120

您可以使用ASCII之System.Text.Encoding类的编码通过使用类来获取每个字节的字符.

或试试这个

  System.Text.ASCIIEncoding.Unicode.GetByteCount(string);
  System.Text.ASCIIEncoding.ASCII.GetByteCount(string);
Run Code Online (Sandbox Code Playgroud)

  • 愚蠢的问题,但如果字符串中的数据来自第三方文件,我们将如何知道是使用Unicode还是ASCII类? (11认同)
  • @MatthewLock你应该使用UTF16(或majidgeek的`Length*sizeof(Char)`,如果你想要与a的内部表示相同的字节数,它应该给出相同的结果,因为每个`Char`是UTF16/2字节).串.如果你真的想要整个对象占用的确切内存量,而不仅仅是内部字符数组中的字节数,那么你可以考虑[更通用的方法](http://stackoverflow.com/questions/1128315/发现尺寸-的对象实例-在字节-在-C-尖锐). (6认同)

Maj*_*jid 83

来自MSDN:

一个String对象的有序集合System.Char,代表了字符串对象.

所以你可以使用这个:

var howManyBytes = yourString.Length * sizeof(Char);
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记考虑长度成员的大小.int howManyBytes = yourString.Length*sizeof(Char)+ sizeof(int); (2认同)
  • 这应该是正确答案。另外,.Length 是如果您发送相同的字符串,服务器将接收的字节数。这就是我所需要的。 (2认同)

小智 23

System.Text.ASCIIEncoding.Unicode.GetByteCount(yourString);
Run Code Online (Sandbox Code Playgroud)

要么

System.Text.ASCIIEncoding.ASCII.GetByteCount(yourString);
Run Code Online (Sandbox Code Playgroud)


ens*_*tis 12

a 将占用多少字节string取决于您选择的编码(或者在您不知情的情况下在后台自动选择)。此示例代码显示了差异:

using System;
using System.Text;

static void Main()
{
    Encoding testedEncodings = new[]
    {
        Encoding.ASCII,   // Note that '' cannot be encoded in ASCII, data loss will occur
        Encoding.UTF8,    // This should always be your choice nowadays
        Encoding.Unicode, // This is UTF-16. It is used by .NET to store your strings in RAM when the application is running, but this isn't useful information unless you're trying to manipulate bytes in RAM
        Encoding.UTF32
    };

    string text = "a";

    Console.WriteLine($"Tested string: {text}");
    Console.WriteLine($"String length: {text.Length}");
    Console.WriteLine();

    PrintTableHeader("Encoding", "Bytes", "Decoded string");

    foreach (var encoding in testedEncodings)
    {
        byte[] bytes = encoding.GetBytes(text);
        string decodedString = encoding.GetString(bytes);

        PrintTableRow(
            encoding.EncodingName,
            $"{bytes.Length} ({string.Join(' ', bytes)})",
            decodedString);
    }
}

static void PrintTableHeader(params string[] values)
{
    PrintTableRow(values);
    Console.WriteLine(new string('-', 60));
}

static void PrintTableRow(params string[] values)
{
    Console.WriteLine("{0,-16} | {1,-24} | {2}", values);
}
Run Code Online (Sandbox Code Playgroud)

输出:

Tested string: a
String length: 3

Encoding         | Bytes                    | Decoded string
------------------------------------------------------------
US-ASCII         | 3 (97 63 63)             | a??
Unicode (UTF-8)  | 5 (97 240 159 161 170)   | a
Unicode          | 6 (97 0 62 216 106 220)  | a
Unicode (UTF-32) | 8 (97 0 0 0 106 248 1 0) | a
Run Code Online (Sandbox Code Playgroud)