我有代码,用户将两个字符输入string
变量。我有一个函数,用于验证用户输入只有两个字符长,并且它只包含有效的十六进制数字。
我想将这些数字写入一个32字节长的二进制文件。我试过了:
outFile.write((char*)&string[0], 1);
在一个运行32次的循环中(我想一次写一个字节)进行测试,但它只是为char编写ascii代码,而不是实际的char本身。我希望它写一个nybble并跳过一个nybble,但是它写了一个完整字节的ascii信息。所以我试过了:
outFile.write((unsigned char*)&string[0], 1);
但是我的编译器抱怨它是一个无效的演员。
我想在不将字符串转换为c样式字符串的情况下解决此问题。换句话说,我希望string
包含两个字符并表示一个字节的信息。不是四个(加上空字符)。
答案 0 :(得分:1)
您有一个表示整数的字符串。所以将字符串转换为整数:
unsigned char byte = (unsigned char)std::stoi(string, 0, 16);
outFile:write(static_cast<const char*>(&byte), 1);
答案 1 :(得分: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);