-1
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 中编译

4

2 回答 2

1

您正在将不可打印的字符分配给FramebufferUpdateRequest.

您将需要以某种方式将其转换为整数(即​​使用循环和%d)或可打印字符(例如,添加'A'到每个元素)。

基本的可打印字符集显示在 Wikipedia中。

于 2011-03-14T08:30:10.910 回答
1

我想你想写:

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是一个整数。

于 2011-03-14T08:30:48.953 回答