日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

解讀C#中ReadString的一些小疑惑_C#教程

作者:成長的香蕉 ? 更新時間: 2023-03-20 編程語言

ReadString的一些小疑惑

BinaryReader . ReadString 方法? ()

從當前流中讀取一個字符串。?字符串有長度前綴,一次 7 位地被編碼為整數。

初學文件操作, 當我看見ReadString這個方法時, 很疑惑,字符串有長度前綴, 前綴在哪,誰定義的?

最后在無數次驗證和冥想后,在百度中找到了答案。。。

其實這個長度前綴是由BinaryWriter, Write(string)這個方法寫進去的,這個長度前綴一次7位被編碼為整數, 也就是說,一般一個字節是8位, 但是他七位就編程一個字節, 所以這個字節最大的長度為128,所以當一個字節為128時,用于長度的每個字節只用7個比特,最高位用來表示是否有后續長度字節,

0 0000101, 最高位零,因此長度為5。

1 0000011,最高位為 ?1?,表示還有后續字節,用兩個字節 來表示長度為 1 * 128 + 3 = 131。

下面給出我驗證的結果:

這里都是用16進制來展示的 轉化為二進制:

80 為1 0000000,因為最高位為1 表示進了一位 所以再用一個字節表示進位0 0000001?

也就是 1 * 128 = 128 ;

80 02 也就是 2 * 128 = 256 ;

D8 ?23 也就是 23轉化為十進制 35 * 128 = 4480 ;

D8 ?二進制位:11011000; 要減一個 最高位 也就是

11011000 - 10000000 = 10 11000 = 88(十進制);

7E 二進制:0 1111110; 最高位為0; 所以不需要進位 為126;

總結

原文鏈接:https://blog.csdn.net/qq_41145567/article/details/80354769

欄目分類
最近更新