如何在C中将char数组表示为单个字符串

时间:2018-12-03 02:53:34

标签: c

我刚刚开始学习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从哪里来?

谢谢

2 个答案:

答案 0 :(得分:1)

您似乎在混淆字符串和数字以及long / int。字符串是内存中的字符序列。数字是一个抽象概念,可以用多种方式表示。 longint是C语言中代表数字的数字数据类型。

因此,函数strtol将以某个底数(以十六进制或十进制或八进制表示的所有数字)表示的数字字符串转换为该数字的long表示形式。尽管它可以用作将十六进制转换为十进制的函数的一半,但它不会将十六进制转换为十进制(或进行任何类型的“基数”转换)。

使用printf("%ld"时,它将long表示形式中的数字转换为十进制字符串表示形式,并在stdout(通常是终端窗口)上打印该数字。显示与数字相关的任何内容都是必需的,因为终端不能显示数字,只能显示字符。

现在,数字和数字表示之间的上述所有区别似乎都不清楚,但这非常重要-在理解如何编写和理解用C编写的程序中至关重要。

答案 1 :(得分:0)

arr的类型应为无符号字符