我有一个打印出int输入二进制文件的函数。
当我有一个字符串形式的十六进制时,我使用:
调用该函数 int num = 0;
stringstream << "0xabcd123";
stringstream >> num; //num becomes the decimal representation of the above hex.
outputBinary(num);
完美无缺。
然而,
int num = 0;
stringstream << "0xabcd1234"; //fully filled hex value.
stringstream >> num; //num remains at 0.
outputBinary(num);
当从十六进制字符串转换为&#34; num&#34;?
时,完全填充的十六进制值是否会导致字符串流溢出答案 0 :(得分:3)
该值超出范围。根据标准,使用strtoll
解析字符串...该值适合long long
并被解释为正数。然后它检查它是否适合所提供的类型(int
)。但不,它不能,假设你的编译器有32位int
。
书写
int num = 0xabcd1234;
源代码中的也会出现问题,因为文字将被赋予类型unsigned int
,并且对signed int
的隐式转换超出范围,导致实现定义的行为。