C 使用十进制数的转换

C 使用十进制数的转换,c,C,也许这是C程序员最简单的事情之一,但我真的无法理解 unsigned char Value[4]; unsigned long ulVer = 00010001; unsigned long uSize = sizeof(ulVer); memcpy(Value, &ulVer, uSize); memcpy(&ulVer, Value, uSize); printf("%d",ulVer); 为什么ulVer是4097而不是10001 因为以0开头的整数常量被认为是八进

也许这是C程序员最简单的事情之一,但我真的无法理解

unsigned char Value[4]; 
unsigned long ulVer = 00010001;
unsigned long uSize = sizeof(ulVer);
memcpy(Value, &ulVer, uSize);
memcpy(&ulVer, Value, uSize); 
printf("%d",ulVer); 

为什么ulVer是4097而不是10001

因为以0开头的整数常量被认为是八进制(以8为基数)。所以数字10001(八进制)=4097(十进制)。

0000001;是一个八进制常数,因为它以0开头。
如果你想要十进制,你需要写10001。

在C中,八进制常量以0开头。要使代码段正常工作,请尝试使用10001

您应该将
Value
声明为:
unsigned char Value[sizeof(unsigned long)]