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

C++读取二进制文件时0b字节无法正常读取的原因问询

问题原因

你遇到的0x0b字节丢失问题,核心原因是误用了**格式化输入运算符>>**读取二进制文件:

  • 即使你给std::ifstream指定了std::ios::binary标识,这个标识的作用仅为禁用换行符\r\n和\n的自动转换,不会改变格式化输入函数的默认行为。
  • >>运算符默认会自动跳过所有ASCII空白字符,0x0b对应的是垂直制表符,属于标准定义的空白字符范畴,因此会被直接过滤,不会读取到变量a中。
修复方法

把读取逻辑替换为无格式的字节读取接口即可,比如用std::ifstream::get()方法,修改后的核心代码如下:

#include <iostream>
#include <fstream>
#include <iomanip>
int main()
{
    std::ifstream myFile ("input.bin", std::ios::in | std::ios::binary);
    if (myFile.is_open())
    {
        std::cout << "File is open!\n";
        unsigned char a;
        int i = 0;
        // 替换为get方法,无格式读取单个字节,不会跳过任何字符
        while(myFile.get(reinterpret_cast<char&>(a)))
        {
            std::cout << std::setw(2) << std::setfill('0') << std::hex << (unsigned int)a;
            i++;
            if (i%2==0)
            {
                if(i%16==0)
                    std::cout << "\n";
                else
                    std::cout << "\t";
            }
        }   
    }
    myFile.close();
    return 0;
}

修改后所有字节包括0x0b都会被正常读取打印。


内容的提问来源于stack exchange,提问作者Mobi Zaman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:45:04