C语言下如何得到字符串的ASCII码,并将其存入另一个字符串?

时间:2023-01-07 13:34:45
例 字符串UID[8]="R|K@|K@|",调用以下语句
for(k=0;k<8;k++)
{
printf("%02X ",UID[k]);
}
将每一个字符的ASCII码以十六进制显示,有如下结果
52 7C 4B 40 00 01 04 E0

现在我想做的是,如何由"R|K@|K@|"这段字符串得到52 7C 4B 40 00 01 04 E0这段ASCII码值,并将其存入另一个字符串array[23]中,即
array[23]="52 7C 4B 40 00 01 04 E0"?

10 个解决方案

#1


每次转换一个UID[k]后,就把它存入array中吗,占两个字节位置就行了

#2


请问怎样实现转换呢?要是直接
for(k=0;k<8;k++)
{array[k]=UID[k]
}
那样岂不是和UID没有什么区别?
我想得到的是UID的ASCII码的字符串,请指点~

#3


sprintf(array, "%d %d ...", UID[0], UID[1],...);

#4


char UID[8]="R|K@|K@|";
char arr[100] = {0};

for(int k=0, j=0;k<8;k++, j+=3)
{
sprintf(arr + j, "%02X ",UID[k]);
}


// 注这样转换到 arr 最后还会多一个空格

#5


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void main()
{
    char UID[]="R|K@|K@|";
    int uidLen = strlen(UID);

    int arrayLen = uidLen * 3;
    char *array = (char*)malloc(arrayLen);

    for(int i = 0; i < uidLen; ++i)
    {
        sprintf(array + i * 3, "%02X ", UID[i]);
    }

    array[arrayLen - 1] = '\0';

    printf("%s\r\n", array);

    free(array);
}

#6


没什么区别,看你想怎么显示了。如果想显示字符,%c;想显示数字%d...
所以可以定义
array[0]=0x52;
或者
array[0]='R';

引用 2 楼 allon7 的回复:
请问怎样实现转换呢?要是直接
for(k=0;k<8;k++)
{array[k]=UID[k]
}
那样岂不是和UID没有什么区别?
我想得到的是UID的ASCII码的字符串,请指点~

#7


sprintf,strcat 可以实现,不过arr的空间不能小于24

#8


其实在内存中都是以 0 和 1 的序列存储的,看你想如何解析它了

         char i = 'R';
printf("%d\n", i);
printf("%x\n", i);
printf("%c\n", i); 

引用 6 楼 g_spider 的回复:
没什么区别,看你想怎么显示了。如果想显示字符,%c;想显示数字%d...
所以可以定义
array[0]=0x52;
或者
array[0]='R';


引用 2 楼 allon7 的回复:
请问怎样实现转换呢?要是直接
for(k=0;k<8;k++)
{array[k]=UID[k]
}
那样岂不是和UID没有什么区别?
我想得到的是UID的ASCII码的字符串,请……


#9


可以试试

int iTemp[2];
iTemp[0] = uid[0]*16777216 + uid[1]*65536 + uid[2]*256 + uid[3];
iTemp[1] = uid[4]*16777216 + uid[5]*65536 + uid[6]*256 + uid[7];

sprinf(array,"%d%d",iTemp[0],iTemp[1])

#10


谢谢大家的意见,三、四、五、九楼的解答都很好,核心是用到sprint函数,将字符转换格式后在另一字符串中进行打印。这很好的解决了我的问题。其它楼说的也对,以不同方式显示同一字符串,但由于是要在PB中进行显示,所以必须先在C下进行转换。总之谢谢大家的解答!

#1


每次转换一个UID[k]后,就把它存入array中吗,占两个字节位置就行了

#2


请问怎样实现转换呢?要是直接
for(k=0;k<8;k++)
{array[k]=UID[k]
}
那样岂不是和UID没有什么区别?
我想得到的是UID的ASCII码的字符串,请指点~

#3


sprintf(array, "%d %d ...", UID[0], UID[1],...);

#4


char UID[8]="R|K@|K@|";
char arr[100] = {0};

for(int k=0, j=0;k<8;k++, j+=3)
{
sprintf(arr + j, "%02X ",UID[k]);
}


// 注这样转换到 arr 最后还会多一个空格

#5


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void main()
{
    char UID[]="R|K@|K@|";
    int uidLen = strlen(UID);

    int arrayLen = uidLen * 3;
    char *array = (char*)malloc(arrayLen);

    for(int i = 0; i < uidLen; ++i)
    {
        sprintf(array + i * 3, "%02X ", UID[i]);
    }

    array[arrayLen - 1] = '\0';

    printf("%s\r\n", array);

    free(array);
}

#6


没什么区别,看你想怎么显示了。如果想显示字符,%c;想显示数字%d...
所以可以定义
array[0]=0x52;
或者
array[0]='R';

引用 2 楼 allon7 的回复:
请问怎样实现转换呢?要是直接
for(k=0;k<8;k++)
{array[k]=UID[k]
}
那样岂不是和UID没有什么区别?
我想得到的是UID的ASCII码的字符串,请指点~

#7


sprintf,strcat 可以实现,不过arr的空间不能小于24

#8


其实在内存中都是以 0 和 1 的序列存储的,看你想如何解析它了

         char i = 'R';
printf("%d\n", i);
printf("%x\n", i);
printf("%c\n", i); 

引用 6 楼 g_spider 的回复:
没什么区别,看你想怎么显示了。如果想显示字符,%c;想显示数字%d...
所以可以定义
array[0]=0x52;
或者
array[0]='R';


引用 2 楼 allon7 的回复:
请问怎样实现转换呢?要是直接
for(k=0;k<8;k++)
{array[k]=UID[k]
}
那样岂不是和UID没有什么区别?
我想得到的是UID的ASCII码的字符串,请……


#9


可以试试

int iTemp[2];
iTemp[0] = uid[0]*16777216 + uid[1]*65536 + uid[2]*256 + uid[3];
iTemp[1] = uid[4]*16777216 + uid[5]*65536 + uid[6]*256 + uid[7];

sprinf(array,"%d%d",iTemp[0],iTemp[1])

#10


谢谢大家的意见,三、四、五、九楼的解答都很好,核心是用到sprint函数,将字符转换格式后在另一字符串中进行打印。这很好的解决了我的问题。其它楼说的也对,以不同方式显示同一字符串,但由于是要在PB中进行显示,所以必须先在C下进行转换。总之谢谢大家的解答!