如何将文件存储到unsigned int
#include <iostream>
#include <fstream>
using namespace std;
unsigned int key[4];
int main(){
ifstream file("key.txt");
store(file);
return 0;
}
我在key.txt中有这些数据
0xFDA5
0xD54E
0xFC00
0xB55A
我创建了这个功能
void store(ifstream &file){
int i = 0;
if(!file)
cout << "Couldn't open file " << endl;
while(!file.eof()){
file >> hex >> key[i];
i++;
}
for( int i = 0 ; i < 4 ; i++ ){
cout << k[i] << endl;
}
}
我得到的数字是十六进制值。我的问题是,如果我想取回这个输出
0xFDA5
0xD54E
0xFC00
0xB55A
我应该使用哪些代码?
答案 0 :(得分:2)
对于大写输出(例如0XFDA5),编辑for
循环如下:
for( int i = 0; i < 4; i++ ) {
cout << std::uppercase << showbase << std::hex << key[i] << endl;
}
或
for( int i = 0; i < 4; i++ ){
printf("%#X\n", key[i]);
}
对于小写输出(例如0xfda5),编辑for
循环如下:
for( int i = 0; i < 4; i++ ) {
cout << showbase << std::hex << key[i] << endl;
}
或
for( int i = 0; i < 4; i++ ){
printf("%#x\n", key[i]);
}
答案 1 :(得分:0)
如前所述,std::hex
表示十六进制,std::showbase
表示“Ox”前缀,std::uppercase
表示大写字母。
但是如何简单地使用STL而不是for
循环:
#include <algorithm>
#include <iostream>
#include <fstream>
#include <iterator>
int main()
{
std::ifstream file("key.txt");
copy(
std::istream_iterator<unsigned int>(file>>std::hex)
,std::istream_iterator<unsigned int>()
,std::ostream_iterator<unsigned int>(std::cout<<std::hex<<std::uppercase<<std::showbase,"\n")
);
return 0;
}
即使您需要一个变量来存储项目:
#include <algorithm>
#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
int main()
{
std::ifstream file("key.txt");
std::vector<unsigned int> keys;
keys.reserve(4);
copy(
std::istream_iterator<unsigned int>(file>>std::hex)
,std::istream_iterator<unsigned int>()
,back_inserter(keys)
);
copy(
begin(keys)
,end(keys)
,std::ostream_iterator<unsigned int>(std::cout<<std::hex<<std::uppercase<<std::showbase,"\n")
);
return 0;
}