【问题标题】:read value of binary two's complement integer in c++在c ++中读取二进制二进制补码整数的值
【发布时间】:2015-10-13 08:20:41
【问题描述】:

我有一个二进制数据文件。有一个几千字节的二进制头。我的任务是读取字节 3000 和 3001。好消息是它应该读取两个值之一:1 或 5。对我来说困难的部分是该数字存储为二进制补码整数。我将进入二进制模式,但我不知道从那里去哪里。 我看到一条路线,因为只有两个值,但不知道如何去做。我相信我需要 1 = 0000 0000 0000 0001 或 5 = 0000 0000 0000 0101,所以我只需要查看字节 3001,问题是我真的不知道如何显示单个字节的值。我需要字节 3001 的值,或者如果有办法访问单个位,最好在屏幕上将字节 3001 显示为 0000 0001 或 0000 0101。

【问题讨论】:

    标签: c++ binary twos-complement


    【解决方案1】:

    对于您的任务“读取字节 3000 和 3001”,只需使用简单的seekg

    cin.seekg(3);
    char c;
    cin >> c;
    bitset < 8 > s(c);
    cout << s;
    

    使用此代码并输入“abcdefg”,您将得到输出“d”;

    但在处理二进制数据时要小心。例如,如果您确实确定从 3000 存储的 int(典型的 4 字节)开始就没有问题。但是,如果在这个地方存储例如 short,并且您读入 int,那么它将 100% 出现某种类型的垃圾,并且很有可能破坏下一个数据。

    【讨论】:

    • cin.seekg(0) 会产生 g 对, seekg(1) 会产生 f? (所有其他代码相同)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多