Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 输出不是它应该是的_C++_Memory - Fatal编程技术网

C++ 输出不是它应该是的

C++ 输出不是它应该是的,c++,memory,C++,Memory,所以我正在开发一个程序,它要求我从包含十六进制值的字符数组中访问数据。在本例中,为了访问数据结构,我必须使用一个名为func()的函数。Func()包含3个指针变量,每种类型都不同,我可以使用它们中的任何一个来访问数组中的数据。无论我选择哪种数据类型,都会影响将存储到指针的值。代码如下: unsigned char data[] { 0xBA, 0xDA, 0x69, 0x50, 0x33, 0xFF, 0x33, 0x40, 0x20, 0x10, 0x03, 0x30

所以我正在开发一个程序,它要求我从包含十六进制值的字符数组中访问数据。在本例中,为了访问数据结构,我必须使用一个名为func()的函数。Func()包含3个指针变量,每种类型都不同,我可以使用它们中的任何一个来访问数组中的数据。无论我选择哪种数据类型,都会影响将存储到指针的值。代码如下:

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);
}
输出:

Val:0x366


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

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


如果不更改传递到
printf
的格式或完全替换它,恐怕无法影响输出。

为什么不能修改
printf
语句?0x366和0x0366是相同的数字。因此,您的输出是正确的。如果不允许您修改printf语句,那么您完全无法对其进行任何操作。不,不是在实际代码中,上面的代码是用于illustration@Rouke最好是发布实际代码,否则你会让人们纠正你在假装代码中犯的错误。或者更糟糕的是,不知道真实代码中的错误,但不知道假装代码中的错误。谢谢你的提问,这是关键的细节。抱歉,在这里为OP发言,但“我不允许修改printf语句”@john,这是答案。OP的愚蠢要求并不能改变这一点。是的,我知道这个解决方案,但谢谢。这可以帮助其他人。但是出于好奇,printf为什么要删掉0?如果数字为1或任何正整数,Printf将不会执行相同的操作。例如,如果s[1]被分配给v,那么输出将是0x5069。@Rouke,因为
0
在这个上下文中没有任何意义
1
的含义是有限的,因此删减它会改变答案。