输出不是应该的

时间:2013-10-10 05:33:09

标签: c++ memory

所以我正在处理一个程序,它要求我从包含十六进制值的char数组中访问数据。在这个例子中,我必须使用一个名为func()的函数来访问数据结构。 Func()包含3个不同类型的指针变量,我可以使用它们中的任何一个来访问数组中的数据。我选择的数据类型将影响将存储到指针的值。 Soo继承了代码:

unsigned char data[]
{
    0xBA, 0xDA, 0x69, 0x50,
    0x33, 0xFF, 0x33, 0x40,
    0x20, 0x10, 0x03, 0x30,
    0x66, 0x03, 0x33, 0x40,
}

func()
{
   unsigned char *ch;
   unsigned int i*;
   unsigned short* s;
   unsigned int v;  

   s = (unsigned short*)&data[0];
   v = s[6];
   printf("val:0x%x \n",v);
}

输出:

  

缬氨酸:0x366

这个输出的问题是它应该是0x0366而前面的零为3,但它在printf语句中被切断,我不允许修改它。我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:4)

使用指定前导零的格式:%04x

如果不改变传递给printf的格式或完全替换它,我担心无法影响输出。