C++ 使用C+;以不同的基址输出不可打印字符+;程序
我认为这是一个简单的问题。我正在乱搞加密库和我在SO上找到的。因此,我尝试在“转储密码文本”部分输出文本/ASCII字符(而不是十六进制) 本部分(原件): 所以我遇到了这个问题,因为我试着打印ASCII字符而不是十六进制字节,它成功了,但我就是不明白为什么 因为:C++ 使用C+;以不同的基址输出不可打印字符+;程序,c++,variables,C++,Variables,我认为这是一个简单的问题。我正在乱搞加密库和我在SO上找到的。因此,我尝试在“转储密码文本”部分输出文本/ASCII字符(而不是十六进制) 本部分(原件): 所以我遇到了这个问题,因为我试着打印ASCII字符而不是十六进制字节,它成功了,但我就是不明白为什么 因为: std::cout << "To Text: "; for (int x = 0; x < ciphertext.size(); x++) { std::cout << ciphertext[x
std::cout << "To Text: ";
for (int x = 0; x < ciphertext.size(); x++)
{
std::cout << ciphertext[x];
}
std::cout将用于表示数字的基数更改为16(十六进制)。在std::cout加密输出之后插入std::cout
的所有数字都是二进制字节,其值范围为0到255。ASCII可打印字符的范围从32到127。也许你现在可以看到问题所在
并非所有字节值都可以用ASCII表示,甚至扩展ASCII或unicode也不能,这就是为什么十六进制和Base64用于加密输出的原因
请参阅字符值。值相同,但输出的基数不同<代码>0x10十六进制
是16
:)。
//
// Dump Cipher Text
//
std::cout << "Cipher Text (" << ciphertext.size() << " bytes)" << std::endl; // returns 16 bytes.
int num = ciphertext.size(); // num returns 16 here
for (int i = 0; i < ciphertext.size(); i++) {
std::cout << "0x" << std::hex << (0xFF & static_cast<byte>(ciphertext[i])) << " ";
}
std::cout << std::endl << std::endl;
std::cout << "Ciphertext size: " << ciphertext.size() << std::endl; // now it's 10 bytes?
std::cout << "num: " << num; // returns 10 bytes?! what the hell...
std::cout << std::endl << std::endl;
std::cout << "To Text: ";
for (int x = 0; x < ciphertext.size(); x++)
{
std::cout << ciphertext[x];
}
std::cout << std::dec << "Ciphertext size: " << ciphertext.size() << std::endl;