【发布时间】:2014-03-14 15:34:50
【问题描述】:
在这里我想打印我从文件中读取的 char 的十六进制表示:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream f("inputfile");
char ch;
f.get(ch);
cout << hex << (int) ch << endl;
f.close();
return 0;
}
所有输入文件都是一个字节0xab
输出为:ffffffab
但是如果我在 ch cout << hex << (int) (unsigned char) ch << endl; 之前添加 (unsigned char) 我有这个输出:ab
为什么会这样?这些ffffff 在我的第一个输入中来自哪里?为什么他们不在第二个?
【问题讨论】:
-
在 C 中(我假设在 C++ 中相同)8 位
signed char的上限值为 127,十六进制值0xab的值 171 大于 127,所以将其读入 8 位signed char是未定义的行为。
标签: c++