You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Basic读取.BIN文件异常:为何结果为ASCII码而非十六进制值?

嘿,这个问题其实是把文本字符串和原始二进制数据搞混啦,我来给你拆解清楚:

问题根源

你用记事本输入的10101011是8个独立的ASCII字符(就是我们平时打出来的'1'和'0'),而不是一个8位的二进制字节值。记事本是纯文本编辑器,它根本不懂什么"二进制字节"——当你以ANSI编码保存时,它会把每个字符转换成对应的ASCII编码存在文件里:

  • 字符'1'对应的ASCII码是十进制49(十六进制0x31)
  • 字符'0'对应的ASCII码是十进制48(十六进制0x30)

所以你的binary.bin文件里实际存的是8个连续的字节:0x31 0x30 0x31 0x30 0x31 0x30 0x31 0x31,而不是你想要的单个字节0xAB(也就是二进制10101011对应的数值)。你的VB代码读取了文件的第一个字节,自然就拿到了第一个字符'1'的ASCII码49,和预期完全不符。

正确创建目标二进制文件的方法

要得到存储单个字节0xAB的文件,不能用记事本,得用能处理原始二进制数据的工具或代码:

方法1:用二进制编辑器创建

找个专门的二进制编辑器(比如HxD、WinHex,都是免费好用的),打开后直接输入十六进制值AB,然后保存成binary.bin就行。

方法2:用VB代码直接生成

如果你想用代码搞定,直接写这段就行:

' 直接写入目标字节0xAB到文件
Dim targetByte As Byte = &HAB
My.Computer.FileSystem.WriteAllBytes("E:/test.bin", New Byte() {targetByte}, False)

运行这段代码后,再用你原来的读取代码,TextBox1.Text就会显示171(十进制,对应十六进制0xAB),完全符合你的预期。

额外情况:如果想把文本"10101011"转成二进制字节

要是你本来就是想把文本形式的二进制字符串转换成对应的字节值,那得先做解析再写入:

' 把二进制字符串解析成字节
Dim binaryText As String = "10101011"
Dim targetByte As Byte = Convert.ToByte(binaryText, 2)
' 写入文件
My.Computer.FileSystem.WriteAllBytes("E:/test.bin", New Byte() {targetByte}, False)

这段代码会把字符串"10101011"转成十进制171(也就是十六进制0xAB),再写入文件,读取时就能得到正确结果。

内容的提问来源于stack exchange,提问作者Meenie Leis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:35:25