首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

有关unsigned char*输出的有关问题(16进制)

2012-02-19 
有关unsigned char*输出的问题(16进制)有一问题,请教各位有一字符串集如 010203 ,(显示结果应是16进制)

有关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 <iostream>
#include <string>

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;
}

热点排行