将十六进制值写入文本文件,显示为二进制

问题描述 投票:0回答:1

我有一个简单的程序,我正在尝试以以下格式将字节模式的十六进制值序列写入文本文件:

任意数据表示

3f 42 5c b8 d9 0a // etc...

这是我的程序。

int main() {
    char digits[] = { 0x7e, 0x30, 0x6d, 0x79, 0x33, 0x5b, 0x5f, 0x70, 0x7f, 0x7b };

    std::fstream file;
    file.open("display.txt", std::ios::out);

    // Ones place
    for (int val = 0; val <= 255; val += 1)
        file << std::hex << digits[val % 10] << " ";
    file << std::endl;

    // Tens place
    for (int val = 0; val <= 255; val += 1)
        file << std::hex << digits[(val / 10) % 10] << " ";
    file << std::endl;

    // Hundreds place
    for (int val = 0; val <= 255; val += 1)
        file << std::hex << digits[(val / 100) % 10] << " ";
    file << std::endl;

    // Sign digit
    for (int val = 0; val <= 255; val += 1)
        file << std::hex << 0 << " ";
    file << std::endl;

    // Ones Place Twos Complement
    for (int val = -128; val <= 127; val += 1)
        file << std::hex << digits[abs(val) % 10] << " ";
    file << std::endl;

    // Tens Place Twos Complement
    for (int val = -128; val <= 127; val += 1)
        file << std::hex << digits[abs(val / 10) % 10] << " ";
    file << std::endl;

    // Hundreds Place Twos Complement
    for (int val = -128; val <= 127; val += 1)
        file << std::hex << digits[abs(val / 100) % 10] << " ";
    file << std::endl;

    // Sign Digit Twos Complement
    for (int val = -128; val <= 127; val += 1) {
        if (val < 0)
            file << std::hex << 01;
        else {
            file << std::hex << 00;
        }
        file << " ";
    }
    file << std::endl;

    file.close();

    return 0;
}

但是,运行程序并打开文本文件后,它似乎是二进制文件...我不确定自己做错了什么,丢失了什么或忽略了什么。

这是我的文本文件的外观:

⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛਍⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾‰‰‰‰‰‰‰‰‰‰⁹⁹⁹⁹⁹⁹⁹⁹⁹⁹″″″″″″″″″″⁛⁛⁛⁛⁛⁛⁛⁛⁛⁛          ⁰⁰⁰⁰⁰⁰⁰⁰⁰⁰ⁿⁿⁿⁿⁿⁿⁿⁿⁿⁿ⁻⁻⁻⁻⁻⁻⁻⁻⁻⁻⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾‰‰‰‰‰‰‰‰‰‰⁹⁹⁹⁹⁹⁹⁹⁹⁹⁹″″″″″″″″″″⁛⁛⁛⁛⁛⁛⁛⁛⁛⁛          ⁰⁰⁰⁰⁰⁰⁰⁰⁰⁰ⁿⁿⁿⁿⁿⁿⁿⁿⁿⁿ⁻⁻⁻⁻⁻⁻⁻⁻⁻⁻⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾‰‰‰‰‰‰‰‰‰‰⁹⁹⁹⁹⁹⁹⁹⁹⁹⁹″″″″″″″″″″⁛⁛⁛⁛⁛⁛਍⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰਍‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰਍ⁿ⁰ ⁛″⁹‰⁾⁻ⁿ⁰ ⁛″⁹‰⁾⁻ⁿ⁰ ⁛″⁹‰⁾⁻ⁿ⁰ ⁛″⁹‰⁾⁻ⁿ⁰ ⁛″⁹‰⁾⁻ⁿ⁰ ⁛″⁹‰⁾⁻ⁿ⁰ ⁛″⁹‰⁾⁻ⁿ⁰ ⁛″⁹‰⁾⁻ⁿ⁰ ⁛″⁹‰⁾⁻ⁿ⁰ ⁛″⁹‰⁾⁻ⁿ⁰ ⁛″⁹‰⁾⁻ⁿ⁰ ⁛″⁹‰⁾⁻ⁿ⁰ ⁛″⁹‰⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰ⁿ⁻⁾‰⁹″⁛ ⁰਍‰‰‰‰‰‰‰‰‰‰⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁻⁻⁻⁻⁻⁻⁻⁻⁻⁻ⁿⁿⁿⁿⁿⁿⁿⁿⁿⁿ⁰⁰⁰⁰⁰⁰⁰⁰⁰⁰          ⁛⁛⁛⁛⁛⁛⁛⁛⁛⁛″″″″″″″″″″⁹⁹⁹⁹⁹⁹⁹⁹⁹⁹‰‰‰‰‰‰‰‰‰‰⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾‰‰‰‰‰‰‰‰‰‰⁹⁹⁹⁹⁹⁹⁹⁹⁹⁹″″″″″″″″″″⁛⁛⁛⁛⁛⁛⁛⁛⁛⁛          ⁰⁰⁰⁰⁰⁰⁰⁰⁰⁰ⁿⁿⁿⁿⁿⁿⁿⁿⁿⁿ⁻⁻⁻⁻⁻⁻⁻⁻⁻⁻⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾‰‰‰‰‰‰‰‰‰‰਍‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾⁾‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰਍‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‱‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰‰਍

甚至都没有从std::endl打印新行。

编辑

我一直在做一些测试;而且我怀疑它与std::hex ...

结合使用的数组类型有关

但是,如果我使用charunsigned charstd::uint8_tstd::int8_t或[ C0]似乎正在打印出十六进制值...

[当使用不是short类型的int类型...我得到此输出:

unsigned int

我认为这可能会解决我自己的问题,但是我仍然想知道为什么我得到将std::uint16_t类型与std::int16_t一起使用的输出...

c++ hex text-files fstream
1个回答
1
投票

代替此:

integral

此:

char
© www.soinside.com 2019 - 2024. All rights reserved.