C 字串位元組的獲取

2022-09-20 20:48:11 字數 926 閱讀 4871

今天偶然發現乙個問題——字串位元組獲取的方式不同會導致獲取的結果不一樣。

定義如下方法,用於獲取字串的位元組:

1

static

byte getbytes(string

data)210

return

ms.toarray();11}

12 }

以下方式也可以獲取字串對應的位元組:

1 utf8encoding encoding = new

utf8encoding();

2int len1 = encoding.getbytes(name).length;

測試:

1

static

void main(string

args)

2 \n\nlen2 = ");

1112

console.readkey();

13 }

輸出:

值不一樣,為什麼?

binarywriter 並沒有正常地寫入string的二進位制,而是加了點額外的資訊,這在嚴格要求位元組正確的場景下會出問題,如http請求體,伺服器會對這些多出來的位元組表示懵逼。前面多出來的位元組實際上是表示string的長度,叫長度字首(length-prefixed)msdn,據so某答主的說法,這是供binaryreader的readstring方法用,知道長度,它才知道要讀取到**。所以如果流的讀取方不是binaryreader,這些長度字首就是多餘甚至是有害的,這種情況下就不能使用binarywriter.write(string)方法。要想安全地獲取字串的位元組資料用utf8encoding的方式。

感謝這位老哥的文章

C 獲取字串位元組長度

一 c 獲取字串位元組長度 1.在c 語言中使用string 字串unicode 編碼 2.在c 語言中常用漢字 佔 3個位元組 方式1 使用預設編碼類獲取位元組長度 console.writeline encoding.default.getbytecount 張三 輸出 6 常用 乙個字母,數字...

C 獲取字串位元組長度

一 c 獲取字串位元組長度 1.在c 語言中使用string 字串unicode 編碼 2.在c 語言中常用漢字 佔 3個位元組 方式1 使用預設編碼類獲取位元組長度 console.writeline encoding.default.getbytecount 張三 輸出 6 常用 乙個字母,數字...

C 中流,位元組,字元,字串

首先要明白它們本身是由什麼組成的 流 二進位制 位元組 無符號整數 字元 unicode編碼字元 字串 多個unicode編碼字元 那麼在.net下它們之間如何轉化呢?一般是遵守以下規則 流 位元組陣列 字元陣列 字串 下面就來具體談談轉化的語法 流 位元組陣列 memorystream ms ne...