读书人

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

发布时间: 2012-06-08 12:55:24 作者: rapoo

关于字符串里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);} 

读书人网 >C语言

热点推荐