2012-01-03 92 views
56

我想知道如果我能知道C#中的string字节多长时间,任何人都知道吗?如何知道字节的字节大小?

+0

退房[这个答案](http://stackoverflow.com/questions/472906/net-string-to-byte-array-c-sharp )。 – dasblinkenlight 2012-01-03 04:02:10

+9

您是在问一个字符串对象占用多少内存,或者当写入文件或通过网络发送(即编码)时,字符串表示占用多少字节,因为这是两个完全不同的问题。 majidgeek几乎回答了前者,而diya回答了后者(至少对于两种常见的编码)。 – 2013-05-03 08:50:33

+0

可能重复[需要多少字节?](http://stackoverflow.com/questions/3967411/how-much-bytes-will-take) – nawfal 2013-10-23 07:12:08

回答

88

您可以像使用ASCII编码使用System.Text.Encoding类来获得每个字节的字符。

或试试这个

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

愚蠢的问题,但如果字符串中的数据来自第三方文件,我们将如何知道是使用Unicode还是ASCII类? – 2014-02-24 01:11:09

+5

@MatthewLock如果你想使用相同数量的字节作为内部表示,你应该使用UTF16(或者majidgeek的'Length * sizeof(Char)',它应该给出相同的结果,因为每个'Char'都是UTF16/2-字节)一个字符串。如果你真的想要整个对象所需的确切数量的内存,而不仅仅是其内部字符数组中的字节数,那么你可能会考虑[更一般的方法](http://stackoverflow.com/questions/1128315/)发现尺寸-的对象实例-在字节-在-C-尖锐)。 – Bob 2014-07-02 02:25:18

16
System.Text.ASCIIEncoding.Unicode.GetByteCount(yourString); 

或者

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

MSDN

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

所以,你可以使用这个:

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

就我所能理解的数据结构的基础知识而言,它是与 – LoneXcoder 2015-10-08 09:38:49

+0

进行比较的最“朴实”选择。不要忘记考虑长度成员的大小。 int howMyBytes = yourString.Length * sizeof(Char)+ sizeof(int); – 2015-11-29 07:56:29

+0

如果我的字符串长度大于Int,该怎么办? – 2017-05-11 06:53:56