我有一个令我困惑的简单问题。
目标:我想从文件中读取一个给定的字节(比如第一个字节),并使用该字节的ASCII值生成int x。因此,例如,如果字节/字符是'a',我希望x为97(=十六进制为61)。我有以下内容读取文件example.txt的第一个字节:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(){
unsigned int x;
unsigned char b;
ifstream myFile ("example.txt", ios::out | ios::binary);
myFile.seekg (0, ios::beg);
myFile >> b;
x = (unsigned int)b;
cout << hex << x;
return b;
}
问题:如果第一个字节用08表示,那么我确实得到了8的输出。但如果字节用09表示,那么我得到0.我注意到我似乎获取以下字节,除非该字节也是09.我不知道我的问题是否仅在字节用ASCII表示时才显示。
问题:那么如何读取文件中的第一个(或第三个或其他)字节,并使用该字节的ASCII值生成一个int?
(我在Windows XP上)
答案 0 :(得分:3)
这应该解决它。
myFile >> noskipws >> b;
答案 1 :(得分:3)
一些建议:
ios::in
(不是ios::out
)。noskipws
。以下程序读取第4个字符并打印其HEX值对我来说很好:
#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;
int main() {
ifstream myFile("<path>\\example.txt", ios::in | ios::binary);
if (myFile) {
unsigned char b;
myFile.seekg(3) >> noskipws >> b;
if (myFile) { // File was long enough?
unsigned int x = b;
cout << hex << x;
return EXIT_SUCCESS;
}
}
return EXIT_FAILURE;
}
(将<path>
替换为实际路径。)
答案 2 :(得分:2)
尝试使用ifstream::read
代替operator>>
进行阅读。这对我有用:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(){
unsigned int x;
unsigned char b;
ifstream myFile ("example.txt", ios::out | ios::binary);
myFile.seekg (0, ios::beg);
myFile.read(reinterpret_cast<char*>(&b), sizeof(b));
x = (unsigned int)b;
cout << hex << x;
return b;
}