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码的字符串,请指点~
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 最后还会多一个空格
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';
所以可以定义
array[0]=0x52;
或者
array[0]='R';
#7
sprintf,strcat 可以实现,不过arr的空间不能小于24
#8
其实在内存中都是以 0 和 1 的序列存储的,看你想如何解析它了
char i = 'R';
printf("%d\n", i);
printf("%x\n", i);
printf("%c\n", i);
char i = 'R';
printf("%d\n", i);
printf("%x\n", i);
printf("%c\n", i);
#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码的字符串,请指点~
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 最后还会多一个空格
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';
所以可以定义
array[0]=0x52;
或者
array[0]='R';
#7
sprintf,strcat 可以实现,不过arr的空间不能小于24
#8
其实在内存中都是以 0 和 1 的序列存储的,看你想如何解析它了
char i = 'R';
printf("%d\n", i);
printf("%x\n", i);
printf("%c\n", i);
char i = 'R';
printf("%d\n", i);
printf("%x\n", i);
printf("%c\n", i);
#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下进行转换。总之谢谢大家的解答!