Не могли бы вы объяснить результаты и указать на ошибку - PullRequest
0 голосов
/ 14 марта 2011
char FramebufferUpdateRequest[11];
uint16_t val;
memset(FramebufferUpdateRequest, 0, 10);
FramebufferUpdateRequest[0] = 3;
FramebufferUpdateRequest[1] = 1;
val = 3;
memcpy(FramebufferUpdateRequest+6, &val, 2);
val = 2;
memcpy(FramebufferUpdateRequest+8, &val, 2);
FramebufferUpdateRequest[10]='\0';
printf("framerequest :: %c  %s\n", FramebufferUpdateRequest[1], FramebufferUpdateRequest);

вывод этого printf пустой, то есть "framerequest ::". Может кто-нибудь указать, что я делаю неправильно?

скомпилировано в gcc 4.1.2

Ответы [ 2 ]

1 голос
/ 14 марта 2011

Я думаю, что вы хотели написать:

memset(FramebufferUpdateRequest, 0, 10);
FramebufferUpdateRequest[0] = '3'; //notice the difference
FramebufferUpdateRequest[1] = '1'; //notice the difference
val = '3';  //or var = ('3' << 1 | '3') if you want both bytes to have '3'
memcpy(FramebufferUpdateRequest+6, &val, 2);
val = '2';  //or var = ('2' << 1 | '2') if you want both bytes to have '2'

Знайте разницу между '1' и 1:

   cout << (int) ('1') << endl;
   cout << (int) (1) << endl;

Вывод: (http://www.ideone.com/z3spn)

49
1

Объяснение: '1' является литералом символа , значение ascii которого равно 49, тогда как 1 является целым числом.

1 голос
/ 14 марта 2011

Вы назначаете непечатаемые символы для FramebufferUpdateRequest.

Вам необходимо каким-то образом преобразовать его либо в целые числа (т. Е. Использовать цикл и %d), либо в печатные символы (например, добавить 'A' к каждому элементу).

Основной набор печатных символов показан в Википедии .

...