如何知道字符串的字节大小?

我想知道在 C # 中 string的字节数是多少,有人知道吗?

183130 次浏览
System.Text.ASCIIEncoding.Unicode.GetByteCount(yourString);

或者

System.Text.ASCIIEncoding.ASCII.GetByteCount(yourString);

您可以使用诸如 ASCII 之类的编码,通过使用 System.Text.Encoding类获得每个字节的字符。

或者试试这个

  System.Text.ASCIIEncoding.Unicode.GetByteCount(string);
System.Text.ASCIIEncoding.ASCII.GetByteCount(string);

来自 MSDN:

String对象是表示字符串的 System.Char对象的顺序集合。

所以你可以用这个:

var howManyBytes = yourString.Length * sizeof(Char);

从.Net5开始,您可以使用 Convert.ToHexString。 还有一个反向操作的方法: Convert. FromHexString

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

void Main()
{
string text = "a🡪";
Console.WriteLine("{0,15} length: {1}", "String", text.Length);


PrintInfo(text, Encoding.ASCII); // Note that '🡪' cannot be encoded in ASCII, information loss will occur
PrintInfo(text, Encoding.UTF8); // This should always be your choice nowadays
PrintInfo(text, Encoding.Unicode);
PrintInfo(text, Encoding.UTF32);
}


void PrintInfo(string input, Encoding encoding)
{
byte[] bytes = encoding.GetBytes(input);


var info = new StringBuilder();
info.AppendFormat("{0,16} bytes: {1} (", encoding.EncodingName, bytes.Length);
info.AppendJoin(' ', bytes);
info.Append(')');


string decodedString = encoding.GetString(bytes);
info.AppendFormat(", decoded string: \"{0}\"", decodedString);


Console.WriteLine(info.ToString());
}

产出:

         String length: 3
US-ASCII bytes: 3 (97 63 63), decoded string: "a??"
Unicode (UTF-8) bytes: 5 (97 240 159 161 170), decoded string: "a🡪"
Unicode bytes: 6 (97 0 62 216 106 220), decoded string: "a🡪"
Unicode (UTF-32) bytes: 8 (97 0 0 0 106 248 1 0), decoded string: "a🡪"