java hex2bin_hex2bin / bin2hex / pack / unpack 的理解及应用

文本文件 / 二进制文件 / 二进制bit流

计算机在存储或传输数据时都是以 bit 流的形式(二进制),文本文件和二进制文件的主要区别就是在于文本文件是有字符集的,ascii/utf8/utf16 等,读取时会将二进制流解码成对应的字符集字符。而二进制文件则简单的将数据作为二进制流处理,使用文本编辑器打开时,ascii解码,1byte 1byte 的处理并,有的落在ascii可打印字符中的就显示,没有落在其中的就是我们看到的乱码了。

例如

存储

ascii 文本数据 hello 存储的二进制流如下

存储的是每个字符的 ASCII 码

01101000 01100101 01101100 01101100 01101111

读取

按 ascii 文本文件读取

会依次读取 1byte 然后输出 ascii 码表对应的字符

为了便于比较我们这里读取 4byte 的数据

01101000 01100101 01101100 01101100

h--------e--------l--------l-------

按二进制流文件读取

可以读取 4byte 作为 uint 解析

二进制:01101000 01100101 01101100 01101100

十进制:|------------1751477356-----------|

可以读取 2byte 作为 usint 解析

二进制:01101000 01100101 01101100 01101100

十进制:|-----26725-----| |-----27756-----|

所以,文本文件和二进制文件的不同之处是解析方式不同,文本文件需要按照自身字符集,截取相应的字节长度读取,ascii 1byte, utf8 英文 1byte/中文 3byte, unicode 2byte 的方式去一段段的读取解析,二进制文件的话并没有表征性的字符集,你可以按自己的需要解析,比如第1 byte位代表的什么(unsigned short int / short int / ascii?),第2~3 byte位代表的什么,第n~k byte位代表的什么。

因为 ascii 的 char 和 int 的存储方式本质一致的(C语言里 char 类型本质就是 int),所以用多字节可能更好理解。

// uft8 存储中文字符使用 3byte 这里我们将其拆成字节码后分别获取对应的二进制

foreach (str_s

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值