我有这样的代码
char *p = "\xFF\xFF\xFF\xFF\xFF\xFF";
for(int i = 0; i<6; i++)
printf(" %d ", *(p + i));
但是输出是-1 -1 -1 -1 -1 -1,这不是我想要的。我想了 255 255 255 255 255 255。
所以,我修改了上面这样的代码:
unsigned char *p = "\xFF\xFF\xFF\xFF\xFF\xFF";
for(int i = 0; i<6; i++)
printf(" %d ", *(p + i));
但是收到错误:“类型"const char *"
的值不能用于初始化"unsigned char *"
类型的实体
最后,我像这样修改它并且它可以工作。
unsigned char *p = (unsigned char*) "\xFF\xFF\xFF\xFF\xFF\xFF";
for(int i = 0; i<6; i++)
printf(" %d ", *(p + i));
我认为这是一个很好的修改,对吧?
答案 0 :(得分:1)
使用
for(int i = 0; i<6; i++)
printf(" %u ", (unsigned char)(*(p + i)));
打印。
答案 1 :(得分:1)
打印字符串时打印数字和字符串最好使用数字。所以:
unsigned char p[6];
memset(p, 0xFF, 6);
for(int i = 0; i<6; i++)
printf(" %d ", p[i]);
编辑:要知道。如果最高有效位为1则为负数,如果您声明char或int或short,那么255 = 0b**1**1111111
为负
瓦尔特
答案 2 :(得分:0)
字符串文字"\xFF\xFF\xFF\xFF\xFF\xFF"
的类型为const char*
。无需使用脏转换为非const类型,您应将p
声明为const
:
const char *p = "\xFF\xFF\xFF\xFF\xFF\xFF";
如果您希望输出为无符号值,请在输出行中输出值。
for(int i = 0; i<6; i++)
printf(" %u ", (unsigned char)(*(p + i)));
背景:文字在你的内存的一个可能的只读区域中被保护(虽然这不是通常的pc系统上的事实,其中内存是可写的)。你应该不依赖于内存是可写的,如果你不这样做,你可以声明数据const
。