
2个回答
展开全部
void ArrayToString(const unsigned char *array, int size, char *str)
{
const char tab[] = "0123456789ABCDEF";
for (int i = 0; i < size; i++)
{
//处理高位
str[i * 2] = tab[array[i] >> 4];
//处理低位
str[i * 2 + 1] = tab[array[i] & 0x0F];
}
}
int CharToInt(char ch)
{
if ( '0' <= ch && ch <= '9' )
{
return ch - '0';
}
else if ( 'A' <= ch && ch <= 'F' )
{
return ch - 'A' + 10;
}
else
{
return 0;
}
}
void StringToArray(const char *str, int size, unsigned char *array)
{
for (int i = 0; i < size / 2; i++)
{
array[i] = ( CharToInt(str[i * 2]) << 4 ) ^ CharToInt( str[i * 2 + 1] );
}
}
void main()
{
char *str = "AF1023";
unsigned char array[3] = {0};
char buf[7] = {0};
StringToArray( str, 6, array );
ArrayToString( array, 3, buf );
printf("原始字符串 %s\n", str);
printf("转成数组再转回字符串 %s\n", buf);
}
自己要确保 接收参数的缓冲的大小,别写越界了
{
const char tab[] = "0123456789ABCDEF";
for (int i = 0; i < size; i++)
{
//处理高位
str[i * 2] = tab[array[i] >> 4];
//处理低位
str[i * 2 + 1] = tab[array[i] & 0x0F];
}
}
int CharToInt(char ch)
{
if ( '0' <= ch && ch <= '9' )
{
return ch - '0';
}
else if ( 'A' <= ch && ch <= 'F' )
{
return ch - 'A' + 10;
}
else
{
return 0;
}
}
void StringToArray(const char *str, int size, unsigned char *array)
{
for (int i = 0; i < size / 2; i++)
{
array[i] = ( CharToInt(str[i * 2]) << 4 ) ^ CharToInt( str[i * 2 + 1] );
}
}
void main()
{
char *str = "AF1023";
unsigned char array[3] = {0};
char buf[7] = {0};
StringToArray( str, 6, array );
ArrayToString( array, 3, buf );
printf("原始字符串 %s\n", str);
printf("转成数组再转回字符串 %s\n", buf);
}
自己要确保 接收参数的缓冲的大小,别写越界了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
个人感觉完全没必要转换,在内存中0XFF0X300X0C字符串的存储方式也是FF 30 0C的形式,仅多一个\0(同样是ASCII码)。楼主想实现什么效果?
追问
服务器端接受的格式智能是字节数组{FF 30 0C},但是外层定义的格式又是'0XFF0X300X0C”我如果直接把字符串传到服务器上去会识别不了的
追答
大可不必担心,没问题的,字节流而已,没必要这样转换。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询