gpt4 book ai didi

c++ - 以二进制模式扫描文件并将十六进制字符解释为 C++ 中的实际数字

转载 作者:搜寻专家 更新时间:2023-10-31 01:48:32 26 4
gpt4 key购买 nike

我知道这个标题听起来可能令人困惑。我有一个简单的问题,但我还没有解决。

假设我有一个文件,用十六进制编辑器打开它显示里面有两个字符,比如 0x1B0x00(显然不可打印)。我想在 HEX 中将其作为 1B00,在 DEC 中为 6912,而不是直接转换错误的字符,这是我看到的所有其他问题。嗯,这就是我想在这里完成的任务。看起来很简单,但我尝试过的一切都是错误的!即使我显然是以二进制模式打开文件。

我只能单独读取字符,并弄乱了一点,但从来没有做我真正想做的事情,这很简单,就是将这 2 个十六进制字符解释为十六进制数字,然后将其转换为十进制。

抱歉任何不清楚的想法,我不是母语人士。任何帮助将不胜感激,我相信你会认为这是一个相当愚蠢的问题 :P

编辑:抱歉,显然我没有正确解释自己。我知道这可能看起来很抽象,但这是一个非常具体的小事情,我一直在努力解决这个问题,但我一直没能解决。也许我可以换个方式问:

我如何以二进制模式扫描字符,比方说 0x1B,并将其转换为实际的 1B 字符。就是这样。

最佳答案

听起来您想将文件作为原始数据读取,然后以十进制显示在屏幕上? super 简单!

int main() {
std::ifstream myfile("filename.data", std::ofstream::binary);
uint16_t number;
char* buffer = (char*)(&number);
while(myfile.read(buffer, sizeof(number))) {
std::cout << number << ' ';
}
}

之所以如此简单,是因为不涉及十六进制。该文件保存为一系列字节,每个字节包含 256 个值中的一个。它们不是十六进制,它们只是一系列值。如果将两个字节读入 uint16_t,这是将两个字节解释为单个无符号 2 字节值的最简单方法。默认情况下,流出 uint16_t 将以十进制显示该值。不涉及十六进制。您在十六进制编辑器中看到的十六进制是因为十六进制编辑器将字节解释为十六进制值

关于c++ - 以二进制模式扫描文件并将十六进制字符解释为 C++ 中的实际数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17711882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com