第1个回答 2012-04-26
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);
}
自己要确保 接收参数的缓冲的大小,别写越界了