将十六进制写入文件

Moo*_*oon 6 c++ string hex file

我有一个程序可以读取hex文件的 ,修改它,并将修改后的十六进制存储在std::string.

例如,我将如何将其写入文件

std::string wut="b6306edf953a6ac8d17d70bda3e93f2a3816eac333d1ac78";
Run Code Online (Sandbox Code Playgroud)

并获得它的价值

.0n..:j..}p...?*8...3..x
Run Code Online (Sandbox Code Playgroud)

在输出的文件中?

我不想使用sprintf,但我想如果有必要,我会做我必须做的。

Pet*_*r R 5

如果我正确理解您的问题,您希望将文本转换为等效的数字,然后写入文件。鉴于您在问题中提供的提示,看起来应该逐字节完成。下面是实现这一目标的一种方法。请注意,需要将每个字节从字符串转换为整数值。

#include <string>
#include <sstream>
#include <iostream>
#include <fstream>
#include <ios>

std::string wut = "b6306edf953a6ac8d17d70bda3e93f2a3816eac333d1ac78";

int main()
{
    std::ofstream datafile("c:\\temp\\temp1.dat", std::ios_base::binary | std::ios_base::out);

    char buf[3];
    buf[2] = 0;

    std::stringstream input(wut);
    input.flags(std::ios_base::hex);
    while (input)
    {
        input >> buf[0] >> buf[1];
        long val = strtol(buf, nullptr, 16);
        datafile << static_cast<unsigned char>(val & 0xff);
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 当心!如果十六进制字符串中有两个或多个连续“0”的链中的零,则此方法不起作用!请参阅下面我提供的另一个可能的解决方案,假设十六进制字符串的长度为偶数,该解决方案将 100% 有效。 (3认同)