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

关于字符串里16进制的有关问题

2012-06-08 
关于字符串里16进制的问题不好意思 不太会表达 希望达人帮忙首先我读取一个字符串 然后分别把每个字符的十

关于字符串里16进制的问题
不好意思 不太会表达 希望达人帮忙
首先我读取一个字符串 然后分别把每个字符的十六进制的高位和低位赋给两个char型
那个字符串里每个字符都在 0x00 -0x99之间 我想把字符串的十六进制输出出来
char* NUM(char* buffer)
{
  const size_t size=(strlen(buffer))*2;
  char high;
  char low;
  char* num=new char[size+1];
  for(int i=0,j=0;i<size/2;j++,i)
  {
  high=(buffer[i]&0xF0)>>4;
  low=(buffer[i])%0x10;
  .....
  high=(int)high+48;
  .....
  low=(int)low+48;
  num[j]=high;
  num[++j]=low;
  }
  num[size]='\0';
  return num;
}
我简单的写了主要的代码 我发现有些字符的十六进制的高位是8的时候 它的低位输出的就是!#¥%这些符号 而高位8却正常的输出 我理解就是低位有点问题 我知道一点关于16进制负数的问题 但是高位是9的时候 程序没有问题 只有一个字符高位是8的时候 低位才回输出 不正确的 我查了!#¥%这些asc码是30多左右可是我已经加了48 只能说 低位是个负数 我用了 unsigned char low 也如此  
 不知道我说的明白不明白 我自己都不知道怎么说 就是希望 帮帮忙 看懂的 谢谢

[解决办法]
取低4位应该用
low=buffer[i]&0xf;
原因是,当被除数buffer[i]<0时,模运算
buffer[i]%0x10
的结果也为负数。

C/C++ code
#include<stdio.h>#include<string.h>#include<malloc.h>char *NUM(const char*);int main(){    char str[5];    str[0]=0x81;    str[1]=0x89;    str[2]=0x91;    str[3]=0x99;    str[4]=0;    puts(NUM(str));    return(0);}char *NUM(const char *buffer){    int size=2*strlen(buffer);    char *num=(char*)malloc((size+1)*sizeof(char)),*pos;    pos=num;    while(*buffer)    {        *pos++='0'+((*buffer&0xf0)>>4);        *pos++='0'+(*buffer++&0xf);    }    *pos='\0';    return(num);} 

热点排行