将引号中的字符串转换为C中的ascii2字节数组

时间:2019-03-09 09:16:02

标签: c arrays initialization

如何轻松地将引号中的字符串转换为ascii2值数组?

例如:

char ST1[5] = "12345";

char DST1[5] = { 0x31, 0x32, 0x33, 0x34, 0x35 }; //string of bytes

3 个答案:

答案 0 :(得分:1)

几乎没有。

首先,请记住,诸如"12345"之类的字符串文字在末尾有一个额外的“空”字节。因此,与其将"12345"的数组初始化处理为5个元素的数组,实际上是6个元素的数组,所以此初始化语句更合适:

char ST1[6] = "12345";

或者仅仅是:

char ST1[] = "12345"; //自动推断“ 6”的大小。

等同于:

char DST1[] = {0x31,0x32,0x33,0x34,0x35,0x00};

一旦包含6个元素的数组,就可以将其传递为好像只有5个元素:

因此,如果您有一些代码希望对5个字符组成的数组进行操作:

 void foo(char DST1[])
 {
     for(int i = 0; i < 5; i++)
     { 
         process(DST1[i]);
     }
 }

您可以按以下方式调用它:

char ST1[]="12345";
foo(ST1);

答案 1 :(得分:1)

ST1DST1的定义之间唯一的区别是无声的假设,即至少对于数字而言,目标字符集是ASCII。

这是另一种选择:

char CST1[5] = { '1', '2', '3', '4', '5' };

但是请注意,这些char数组都不是正确的C字符串,因为它们都缺少空终止符。如果要使用C字符串定义数组,则应使用以下语法:

char SST1[] = "12345";

注意[]之间缺少的长度:编译器将从初始化程序确定数组的长度,并添加一个空终止符,因此长度为6

C字符串可以用strcpy复制,没有空终止符的char数组应该用memcpymemmove复制。

答案 2 :(得分:0)

一劳永逸,一个答案就是强制转换。 简单的方法:

int main () {
    int i;
    char ST1[5]="12345";
    for (i=0;i<5;i++)
        printf("%d\n",(int)ST1[i]);
    return 0;
}

就像我打印的一样,您可以存储它,使用它来进行计算或任何可能的方法。正如我所看到的,您希望这些数字以十六进制表示。为此,只需在这里printf() formatting for hex

的帮助下更改printf的占位符