Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用C+;以不同的基址输出不可打印字符+;程序_C++_Variables - Fatal编程技术网

C++ 使用C+;以不同的基址输出不可打印字符+;程序

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

我认为这是一个简单的问题。我正在乱搞加密库和我在SO上找到的。因此,我尝试在“转储密码文本”部分输出文本/ASCII字符(而不是十六进制)

本部分(原件):

所以我遇到了这个问题,因为我试着打印ASCII字符而不是十六进制字节,它成功了,但我就是不明白为什么

因为:

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;