当前位置:我的异常网» C语言 » 有关unsigned char*输出的有关问题(16进制)
有关unsigned char*输出的有关问题(16进制)
www.myexceptions.net 网友分享于:2013-02-20 浏览:195次
有关unsigned char*输出的问题(16进制)
有一问题,请教各位;
有一字符串集如 "010203 ",(显示结果应是16进制)
unsigned char* A;
A=(unsigned char*)malloc(3);
有什么办法把上述付给A值.
A[1]=01;
A[2]=02;
A[3]=03;
当用for(i=0;i <3;i++)
{
printf( "%02x ",*A);
A++;
}
打印后也是上述结果,即存储16进制的值.
------解决方案--------------------
#include
#include
using namespace std;
int func(const char* str, unsigned char* digit16)
{
int i, len;
int hi, lo;
if(str == NULL || digit16 == NULL)
return -1;
if((len = strlen(str)) % 2 == 1)
return -2;
for(i = 0; i < len; i++)
if(! ((str[i] > = '0 ' && str[i] <= '9 ') ||
(str[i] > = 'A ' && str[i] <= 'F ') ||
(str[i] > = 'a ' && str[i] <= 'f ')))
return -3;
for(i = 0; i < len / 2; i++)
{
if(str[i * 2] > = '0 ' && str[i * 2] <= '9 ')
hi = str[i * 2] - '0 ';
else if(str[i * 2] > = 'a ' && str[i * 2] <= 'f ')
hi = str[i * 2] - 'a ';
else
hi = str[i * 2] - 'A ';
if(str[i * 2 + 1] > = '0 ' && str[i * 2 + 1] <= '9 ')
lo = str[i * 2 + 1] - '0 ';
else if(str[i * 2 + 1] > = 'a ' && str[i * 2 + 1] <= 'f ')
lo = str[i * 2 + 1] - 'a ';
else
lo = str[i * 2 + 1] - 'A ';
digit16[i] = hi * 16 + lo;
}
return i; /* length of the number */
}
int main()
{
char* str= "010203 ";
unsigned char* A;
A=(unsigned char*)malloc(3);
func(str,A);
for(int i=0;i <3;i++)
{
printf( "%02x ",*A);
A++;
}
return 0;
}
文章评论