C++中的十六进制到JPG的转换

Hex to JPG conversion in C++

本文关键字:JPG 转换 十六进制 C++      更新时间:2023-10-16

我正在写一个C++程序,需要转换一些基本上是HEX格式的字符串输出。该输出字符串以FFD8开始,以FFD9结束,FFD9基本上是JPEG图像。

现在,我想从该字符串输出中获取JPEG文件,但我不想将该字符串输出保存在文本文件中,然后在ios:binary模式下打开它,然后将其转换为JPEG文件。

std::string output; //which is FFD8..........FFD9
//******some code*******???
ofstream imageFile;
imageFile.open('Image.jpg');
imageFile<< output;

如何在不将字符串输出保存在文件中的情况下做到这一点?

提前感谢!

我的假设是,您有一个表示十六进制的字符串,并且您希望将其转换为等效的字节。

byte hexCharToByte(const char h){
    if(isdigit(h))
        return h - '0';
    else
        return toupper(h) - 'A' + 10;
}

这是我不久前在C中写的一些代码,它接受一个字符并将其转换为一个字节。你可以根据需要进行调整。

工作原理:

  • 十六进制值由0-15表示
  • 如果您收到一个数字字符,例如"0",则减去"0"。结果为0
  • 如果你收到一封信,说"a",确保它是大写的A'-'A'为0。"A"的十六进制值是10,所以我们必须加10才能得到其十六进制值
std::string output; //which is FFD8..........FFD9
int main()
{
    std::ofstream thum("name.jpg", std::ios_base::binary | std::ios_base::out);
    char buf[3];
    buf[2] = 0;
    std::stringstream in(output);
    in.flags(std::ios_base::hex);
    while (in)
    {
        in >> buf[0] >> buf[1];
        long val = strtol(buf, nullptr, 16);
        thum << static_cast<unsigned char>(val & 0xFF);
    }
}