十六进制的字符 00 53 31 30 --> 字节数组
代码示例:
int lenth = 0;
char test_data[4] = {0};
memcpy(test_data, "\x00\x53\x31\x30", 4);
lenth = sizeof(test_data);
一个完整demo测试:
头文件:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
字节数组 --> 十六进制的字符 的 实现:
static char str_qra[512] = {0};
// phexsrc 要转换的一段字节
// ihexlen 要转换的字节长度
void Hex2Str_qra(const void *phexsrc, int ihexlen)
{
const char * pbuf = (const char *)phexsrc;
char ulowbyte, uhighbyte;
int i,j;
memset(str_qra, 0, sizeof(str_qra));
// 一个字节,会转换为两位字符,所以字节的长度,不能大于字符串变量的长度的一半
if (ihexlen >= sizeof(str_qra) / 2)
{
return;
}
for (i = 0,j = 0; i < ihexlen * 2; i += 2,j += 3)// 字节间不加空格时,j没有意义
{
// 此处的字节数据都是默认十进制
ulowbyte = pbuf[i / 2] & 0x0f; // 取一个字节的低位,如0x53 & 0x0f = 3,得到低位为3,注意不是'3',而是纯数字3
uhighbyte = pbuf[i / 2] / 16; // 取一个字节的高位,/16会省略余数,如0x53(83/16=5),即得到高位为5,纯数字5
// char 类型本质也是数字,也可以计算!!
if (uhighbyte >= 10)
{
// 例如,高位为10,已知'7'=55,10+'7'=10+55=65,'A'=65
//str_qra[i] = uhighbyte + '7';// 加空格时,注释掉该行
str_qra[j] = uhighbyte + '7';// 不加空格时,注释掉该行
}
else
{
//str_qra[i] = uhighbyte + '0';// 加空格时,注释掉该行
str_qra[j] = uhighbyte + '0';// 不加空格时,注释掉该行
}
if (ulowbyte >= 10)
{
//str_qra[i + 1] = ulowbyte + '7';// 加空格时,注释掉该行
str_qra[j + 1] = ulowbyte + '7';// 不加空格时,注释掉该行
}
else
{
//str_qra[i + 1] = ulowbyte + '0';// 加空格时,注释掉该行
str_qra[j + 1] = ulowbyte + '0';// 不加空格时,注释掉该行
}
str_qra[j + 2] = ' ';// 不加空格时,注释掉该行
}
//str_qra[ihexlen * 2] = '\0';// 加空格时,注释掉该行
str_qra[ihexlen * 3] = '\0';// 不加空格时,注释掉该行
printf("%s\n",str_qra);
}
调用测试:
int main(int argc, char **argv)
{
int lenth = 0;
char test_data[4] = {0};
memcpy(test_data, "\x00\x53\x31\x30", 4);
lenth = sizeof(test_data);
Hex2Str_qra(test_data,lenth);
return 0;
}
编译运行:
gcc -o hello hex.c
./hello
输出结果:
00 53 31 30