C++文件读取的问题

在k.txt中放有(也只有)数据:0x0123456789abcdef
如何将该数据读入到unsigned char k[8]中?
再进一步,可不可以根据是否有0x,按照十进制/十六进制分别将64bit数据从文件中读入并存到unsigned char k[8]中?

补充一下,希望能给出代码,因为我对C++文件操作控制不熟悉。

还有就是,txt文件中放的是16进制数,我希望保存到unsigned char k[8]中的是这个16进制数对应的二进制形式所代表的值(而不是这个字符)。

举个例子,0x4142读取以后,我希望保存到char k[8]中的是字符A和字符B而不是41和42

阅读 3.8k
2 个回答

跟楼上一样,去除0x并把字符串切割。然后用istringstream读入unsigned int再转型。
具体做法看下面。

int main() {
    istringstream iss("41 42 43 44");
    vector<unsigned char> k;

    unsigned int c;
    unsigned char *kk;
    while (iss >> std::hex >> c)
    {
        k.push_back(c);
    }
    kk=&k[0];
    cout << kk<< endl;
    
}

1.验证读到的字符串,是否为16进制。直接用状态机即可,因为本来就很简单。
比如
状态1: 未开始
状态2: 接收字符串"0x"
状态3:接收字符,范围:0-9、A-F
结束后,检查一遍数字部分开头是否包含0,处理数字部分长度不等于8*2的情况。

2.去掉0x后,从右向左按2个字符串为单位间隔,进行切割。
比如
0xFA1B365A2720E564切割为
FA-1B-36-5A-27-20-E5-64

3.切割后,直接从右往左填入 k[8]。注意k[8]在定义候要进行填0的初始化,比如:
FA -> K[0]
1B -> K[1]
36 -> K[2]
...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题