2012-01-03 90 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