0

我有代码,用户将两个字符输入到string变量中。我有一个函数可以验证用户输入是否只有两个字符长,并且它只包含有效的十六进制数字。

我想将这些数字写入一个 32 字节长的二进制文件。我试过:

    outFile.write((char*)&string[0], 1);

在一个运行 32 次的循环中(我想一次写入一个字节)进行测试,但它只是为 char 编写 ascii 代码,而不是实际的 char 本身。我希望它写一个 nybble 并跳过一个 nybble,但它写了一个完整的 ascii 信息字节。所以我尝试了:

    outFile.write((unsigned char*)&string[0], 1);

但是我的编译器抱怨它是一个无效的演员表。

我想在不将字符串转换为 c 样式字符串的情况下解决这个问题。换句话说,我想string包含两个字符并代表一个字节的信息。不是四个(加上空字符)。

4

2 回答 2

1

您有一个表示整数的字符串。所以将字符串转换为整数:

unsigned char byte = (unsigned char)std::stoi(string, 0, 16);
outFile:write(static_cast<const char*>(&byte), 1);
于 2013-02-07T01:11:27.187 回答
0

作为缺少 stoi 的解决方法,您可以执行以下操作:

#include <iostream>
#include <sstream>
#include <ios>

char hexnum[]{"2F"}; // or whatever, upper or lowercase hex digits allowed.
std::istringstream input(hexnum);
int num=0;
input >> std::hex >> num;
unsigned char byte = num;
outFile.write(static_cast<const char*>(&byte), 1);
于 2013-02-07T17:01:54.480 回答