解讀C#中ReadString的一些小疑惑
ReadString的一些小疑惑
BinaryReader . ReadString 方法 ()
從當前流中讀取一個字符串。 字符串有長度前綴,一次 7 位地被編碼為整數(shù)。
初學文件操作, 當我看見ReadString這個方法時, 很疑惑,字符串有長度前綴, 前綴在哪,誰定義的?
最后在無數(shù)次驗證和冥想后,在百度中找到了答案。。。
其實這個長度前綴是由BinaryWriter, Write(string)這個方法寫進去的,這個長度前綴一次7位被編碼為整數(shù), 也就是說,一般一個字節(jié)是8位, 但是他七位就編程一個字節(jié), 所以這個字節(jié)最大的長度為128,所以當一個字節(jié)為128時,用于長度的每個字節(jié)只用7個比特,最高位用來表示是否有后續(xù)長度字節(jié),
0 0000101, 最高位零,因此長度為5。
1 0000011,最高位為 1 ,表示還有后續(xù)字節(jié),用兩個字節(jié) 來表示長度為 1 * 128 + 3 = 131。
下面給出我驗證的結果:
這里都是用16進制來展示的 轉化為二進制:
80 為1 0000000,因為最高位為1 表示進了一位 所以再用一個字節(jié)表示進位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;


總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
asp.net(c#)編程實現(xiàn)將彩色圖片變灰階圖片的方法示例
這篇文章主要介紹了asp.net(c#)編程實現(xiàn)將彩色圖片變灰階圖片的方法,結合實例形式分析了C#圖片讀取及屬性操作相關技巧,需要的朋友可以參考下2017-07-07
C#調(diào)用FFmpeg操作音視頻的實現(xiàn)示例
本文主要介紹了C#調(diào)用FFmpeg操作音視頻的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01
C# 調(diào)用C++寫的dll的實現(xiàn)方法
C#調(diào)用C++的非托管類的dll其實很簡單基本就是固定的調(diào)用格式,有需要的朋友可以參考一下2013-10-10
c#使用filesystemwatcher監(jiān)視文件系統(tǒng)的變化
對于一個文件夾的改變,C#這邊有自己的類來實現(xiàn),我們不需要關心它的內(nèi)部實現(xiàn)機制,不需要關心它底層調(diào)用哪些API,我們只需要關心如何去調(diào)用它,如何讓它幫助我們記錄文件夾的修改情況即可,下面我們就實現(xiàn)它2014-01-01
C#實現(xiàn)創(chuàng)建桌面快捷方式與添加網(wǎng)頁到收藏夾的示例
本文是介紹了c#通過純代碼創(chuàng)建快捷方式與添加網(wǎng)頁到收藏夾,非常具有實用價值,有需要的朋友可以來了解一下。2016-10-10

