ifstream::read 不断返回不正确的值
ifstream::read keeps returning incorrect values
我正在尝试读取.bin文件并返回十六进制值。一切正常,直到它必须读取"F0"或"A0"等值。它不断返回"fffff0"或"ffffa0"。当我修改函数以返回十进制值时,控制台显示"-16"和"-96",而所有其他正确的返回值均为正值。
void reader(string input) {
int size;
char *storage;
ifstream file(input, ios::in | ios::binary);
if (file.is_open()) {
file.seekg(0, ios::end);
size = file.tellg();
storage = new char[size];
file.seekg(0, ios::beg);
file.read(storage, size);
file.close();
for (int i = 0; i < size; i++)
{
cout << hex << (int)storage[i] << endl;
}
}
else {cout << "could not open file" << endl;}
}
">
char"是一个有符号值。当设置字符的顶部位时,它表示负值(例如0x80到0xFF(。当您将负值转换为不同大小的整数时,该值将被保留,从而导致十六进制中的值不同。
#include <iostream>
int main()
{
char ch = 0xF0;
int value = ch;
std::cout << value << std::endl;
std::cout << std::hex << value << std::endl;
}
上面的程序打印"-16,fffffff0"。该程序实际上等效于:
#include <iostream>
int main()
{
char ch = -16;
int value = ch;
std::cout << value << std::endl;
std::cout << std::hex << value << std::endl;
}
要获得预期行为,您需要屏蔽该值:
#include <iostream>
int main()
{
char ch = 0xF0;
int value = ch & 0xFF;
std::cout << value << std::endl;
std::cout << std::hex << value << std::endl;
}
相关文章:
- 在C++中返回不正确的楼层函数值
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- wcslen() 在使用编译指示包时返回不正确的结果
- 乘法返回我的值不正确
- 为什么代码不能返回正确的值?
- 派生类继承的 getter,找不到返回正确值的方法
- 返回类型不正确
- 当我输入分数值时,它返回不正确的结果
- ifstream::read 不断返回不正确的值
- Strftime在iOS上返回一周中不正确的一天
- C++ 中的 MD5 实现返回不正确的摘要
- AccessibleObjectFromPoint() 返回一个不正确的对象
- C 程序不会返回正确的阶乘值
- C 从文件中读取FSTREAM数据不会返回正确的值.inputfile.tellg返回-1
- MSVC OSVersion 返回不正确的版本
- C++ GetModule文件名不会返回正确的字符串
- 'SystemParametersInfo'函数在获取桌面壁纸时返回不正确的值
- 创建 CTime @ 2am 不会返回正确的值(Windows CE,C++)
- c++winsock-recv()返回不正确且奇怪的缓冲区
- Winsock recv() 返回不正确的数据