我刚刚开始学习c语言,现在我对c中的字符串(这是一个char数组)有一些疑问。而且我注意到我可以使用strtol()函数将十六进制的字符串转换为十进制,但是我在网上看到了示例,它们都使用如下所示的方法,但没有任何问题。
char str[]="a24e38154c";
long n = strtol(str,NULL,16);
printf("%ld",n);</i>
我在您的帮助下编辑了代码库。
char arr[100];
char *ptr;
memset(arr,0x00,strlen(arr));
ptr = arr;
arr[0] = 0xa2;
arr[1] = 0x4e;
...总共有8个元素
for( int i = 0;i<8;i++){
ptr+=sprintf(ptr,"%02x",arr[i]);
}
printf("%s",arr);
则输出为0x000ffffffa24e ... 这是什么意思?那些零和fs从哪里来?
谢谢
答案 0 :(得分:1)
您似乎在混淆字符串和数字以及long / int。字符串是内存中的字符序列。数字是一个抽象概念,可以用多种方式表示。 long
和int
是C语言中代表数字的数字数据类型。
因此,函数strtol
将以某个底数(以十六进制或十进制或八进制表示的所有数字)表示的数字字符串转换为该数字的long
表示形式。尽管它可以用作将十六进制转换为十进制的函数的一半,但它不会将十六进制转换为十进制(或进行任何类型的“基数”转换)。
使用printf("%ld"
时,它将long
表示形式中的数字转换为十进制字符串表示形式,并在stdout(通常是终端窗口)上打印该数字。显示与数字相关的任何内容都是必需的,因为终端不能显示数字,只能显示字符。
现在,数字和数字表示之间的上述所有区别似乎都不清楚,但这非常重要-在理解如何编写和理解用C编写的程序中至关重要。
答案 1 :(得分:0)
arr的类型应为无符号字符