将两个字符的字符串变量转换为十六进制

时间:2013-02-07 00:53:42

标签: c++ string c++11 hex typeconverter

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

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

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

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

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

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

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

2 个答案:

答案 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);