gpt4 book ai didi

c++ - 以十六进制形式输出 ASCII?

转载 作者:行者123 更新时间:2023-11-28 01:34:03 28 4
gpt4 key购买 nike

我正在尝试为学校项目实现 AES。我的目标是将加密文本输出到屏幕和 .txt 文件。加密完全按预期进行,我可以通过查看以下内容来验证这一点:

    for (int j = 0; j<object.words * 4; j++)
{
printf("%02x ", Encryptor.out[j]);
}

它正在加密的文本是“我很高兴这能工作”,带有 128 位 key “狗”,这个循环打印加密的前 16 个字符,内容如下:

c8 88 45 0d 5d 40 ff 5b a4 55 91 c9 c4 00 f5 a4

我已验证这是 AES 在此上下文中应打印的内容。后来,我有以下几行输出:

this is Encryptor.out[0] in cout: ╚
This is Encryptor.out[0] in printf with the format code '%02x': c8
Press any key to continue . . .

我的 cout 调用可能只需要一个格式化代码,所以我不关心这个。复杂的是在这一点上:

ofstream OutFile("Encrypted.txt");
Outfile << Encryptor.out[0];

此时,Encrypted.txt 中唯一包含的是单个字符“È”。我知道十六进制的 c8 在 ASCII 中是 'È',但我希望它打印原始的十六进制值。

所以最终,我的问题是,如何让这个字符在我的输出文件中保存为“c8”?是否有 ofstream 可以使用的格式化代码,或者我是否必须跳过一些障碍?

谢谢大家!

最佳答案

就像@stark 评论的那样,要以十六进制打印数据,您可以使用 std::hex 来修改数据的格式化方式。但是,std::hex 仅更改数字的打印方式,因此您需要告诉编译器将您的文本视为数字。幸运的是,有一种简单的方法可以做到这一点。你可以使用

ofstream OutFile("Encrypted.txt");
OutFile << std::hex;
for (const char c : Encryptor.out[0])
{
OutFile << static_cast<int>(c);
}
// Reset back to normal printing
OutFile << std::dec;

你会得到正确的十六进制值而不是重音字符 E。

在这里查看 std::hex http://en.cppreference.com/w/cpp/io/manip/hex

关于c++ - 以十六进制形式输出 ASCII?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50161310/

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