網站首頁 編程語言 正文
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
相關推薦
- 2023-03-29 SVM算法的理解及其Python實現多分類和二分類問題_python
- 2022-06-09 ASP.NET?Core使用EF創建模型(索引、備用鍵、繼承、支持字段)_實用技巧
- 2023-02-26 Golang時間處理中容易踩的坑分析解決_Golang
- 2024-01-09 Certificate used to sign the license is not signed
- 2023-07-15 react全局scss變量
- 2022-08-29 使用C#中的Flags特性_C#教程
- 2022-03-30 Android實現靜音檢測功能_Android
- 2022-07-18 實現?Python?腳本生成命令行_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支