获取包含十六进制值的C字符串的指针

时间:2014-01-22 09:29:47

标签: c++ c-strings

我有这样的代码

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));

我认为这是一个很好的修改,对吧?

3 个答案:

答案 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