我是C / C ++的新手。我正在编写一个教程,无法弄清楚我搞砸了什么。结果我不断变得粗暴。这是我的代码:
#include <stdio.h>
char code[] =
"\xb8\x8d\x5d\xfe\x19\xdb\xc9\xd9\x74\x24\xf4\x5b\x29\xc9\xb1"
"\x1c\x31\x43\x12\x03\x43\x12\x83\x4e\x59\x1c\xec\x8b\xa4\x39"
"\x7b\x0f\xdd\xe5\x3a\xfc\x64\x02\xcb\x33\x5e\x83\xde\x02\x17"
"\xfc\x63\xa3\xd3\xff\x14\x8c\x47\x12\xef\x12\x7c\xf6\xce\x81"
"\xec\xf2\x45\x2a\x76\xa0\xe3\x32\xa2\xf6\xee\x65\x5e\xa4\x7e"
"\xd6\x46\xa4\x1f\x62\xcd\x88\x35\x72\x0e\x6b\x7a\xdf\x08\xc9"
"\xab\x0f\xc6\x5a\xd6\xc9\xc5\xe8\x04\x17\x65\xa3\x47\x76\xac"
"\x6b\xa7\xce\x3d\x82\x18\x03\x20\x2a\x9b\x24\x13\xa1\x5a\x08"
"\x0d\x98\x1e\xa1\x74\xe9\xd4\xc0\xdc\x88\xda\xab\x74\xec\x63";
int main()
{
//int i;
//for (i=0;i<sizeof code; i++){
// code[i] = code[i] ^0xcc;
printf(code);
//}
}
我评论了那些位,因为我试图找出问题所在。最终我想留下他们,看看我得到了什么结果。但随着他们的进出,我得到了胡言乱语。
我确定我使用的是printf错误,但我该如何使用呢?
感谢。
答案 0 :(得分:1)
尝试printf("%s", code);
这可能会成功。
答案 1 :(得分:0)
试试这个:
int main()
{
int i;
for (i=0;i<sizeof code - 1; i++){
code[i] = code[i] ^0xcc;
}
puts(code);
}
答案 2 :(得分:0)
\ xb8表示值为0xB8 hex的char ... \ x8d表示值为0x8D hex的char ...没有人会坐下来为你解码整个字符串。看起来像printf工作得很好,但垃圾进去,垃圾出来:)
实际上你让我好奇所以这就是它在linux控制台中的样子:
torp @ torp:〜/ work / clocal $ ./gibberish
吨܈ګTC)ɱ1CCNY실9 {:D3 ^鸟苷|E* V2E ^ 〜 F b5rkzɫ Z e Gv k = ▒* $ Z
答案 3 :(得分:0)
据我所知,code
的内容是乱码。它不是ASCII,UTF-8,Latin-1或EBCDIC。将其写入文件并在其上运行file
命令时,它只是说“数据”。当我恢复已注释掉的代码时,每个字节与0xcc
相关,它仍然是乱码。
因此,当你的程序打印出乱码时,它正在做它应该做的事情。
你在用什么教程?它告诉你什么期待?
答案 4 :(得分:0)
尝试使用“%x”或“X”格式说明符:
for (unsigned int i = 0; i < sizeof(code); ++i)
{
printf("\\x%02x", (unsigned int) code[i]);
if ((i % 15) == 14)
{
printf("\n");
}
}
printf("\n");