Чар и принтф - PullRequest
       42

Чар и принтф

0 голосов
/ 15 августа 2011

Я новичок в 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, но как мне заставить это работать?

Спасибо.

Ответы [ 5 ]

1 голос
/ 15 августа 2011

Попробуйте printf("%s", code);

Это может помочь.

0 голосов
/ 15 августа 2011

Попробуйте использовать спецификаторы формата "% 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");
0 голосов
/ 15 августа 2011

Насколько я могу судить, содержание code составляет бред.Это не ASCII, UTF-8, Latin-1 или EBCDIC.Когда записываете его в файл и запускаете команду file, он просто говорит «данные».И когда я восстанавливаю закомментированный код, который ксероксирует каждый байт с 0xcc, это все равно бессмысленно.

Поэтому, когда ваша программа печатает бессмысленно, она делает именно то, что должна.

Чтоучебник вы используете?Что он сказал вам ожидать?

0 голосов
/ 15 августа 2011

\ xb8 означает символ со значением 0xB8 hex ... \ x8d означает символ со значением 0x8D hex ... никто не собирается сидеть и декодировать всю строку за вас. Похоже, что printf работает отлично, но мусор входит, мусор выходит:)
На самом деле вы меня заинтересовали, вот как это выглядит в консоли Linux:
torp @ torp: ~ / work / clocal $ ./gibberish т ܈ ګ дц) ɱ1CCNY 실 9 {: d3 ^ Cg | ΁E * V2E ^ ~ F b5rkzɫ Z e Gv k = ▒ * $ Z

0 голосов
/ 15 августа 2011

Попробуйте это:

int main()
{
    int i;
    for (i=0;i<sizeof code - 1; i++){
      code[i] = code[i] ^0xcc;
    }
    puts(code);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...