我正在尝试为学校项目实施AES。我的目标是将加密文本输出到屏幕和.txt文件。加密完全符合预期,我可以通过查看来验证这一点:
for (int j = 0; j<object.words * 4; j++)
{
printf("%02x ", Encryptor.out[j]);
}
它正在加密的文本是“我很高兴这个工作”,使用128位密钥'dog',并且此循环打印加密的前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可以使用的格式化代码,或者我是否必须跳过一些箍?
谢谢你们!
答案 0 :(得分:2)
与@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