我有一个简单的程序,我正在尝试以以下格式将字节模式的十六进制值序列写入文本文件:
任意数据表示
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
...
但是,如果我使用char
,unsigned char
,std::uint8_t
,std::int8_t
或[ C0]似乎正在打印出十六进制值...
[当使用不是short
类型的int
类型...我得到此输出:
unsigned int
我认为这可能会解决我自己的问题,但是我仍然想知道为什么我得到将std::uint16_t
类型与std::int16_t
一起使用的输出...
代替此:
integral
此:
char