对于一个学校项目,我正在编写河豚加密(只是加密,而不是解密)。我已经完成了加密本身,我决定为了好玩而进行解密(在 Blowfish 中这很容易)。
我使用无符号字符来表示字节(尽管我认为 uint8_t 会更便携)。当我试图打印出解密的字节时,我遇到了这个问题。我正在加密纯文本消息。我已经能够打印出我加密的实际短信,但仅限于一个非常特定的位置。相同的确切代码似乎在其他任何地方都不起作用。这里是:
int n;
for(n = 0; n < numBlocks; n++) // Blocks are 32-bit unsigned ints (unsigned long)
{
// uchar is just a typedef for unsigned char
// message is an array of uchars
message[n] = (uchar) ((blocks[n]>>24));
message[n+1] = (uchar) ((blocks[n]>>16));
message[n+2] = (uchar) ((blocks[n]>>8));
message[n+3] = (uchar) ((blocks[n]));
// Printing works here; exact message comes back
printf("%c%c%c%c", message[n], message[n+1], message[n+2], message[n+3]);
}
但是当我尝试在两行之后使用完全相同的代码时,它不起作用。
for(n = 0; n < numBlocks; n++)
{
// Printing doesn't work here.
// Actually, the first letter works, but none of the others
printf("%c%c%c%c", message[n], message[n+1], message[n+2], message[n+3]);
}
我也试过以数字格式打印出字符,我可以看到它们实际上已经改变了。
这里到底发生了什么?这是未定义的行为吗?有没有人有可靠的解决方案?我没有做任何事情来更改两个调用之间的消息数组的值。
我正在使用 sparc 处理器在 Sun 5.10 上运行和编译它。