关于字符串里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
的结果也为负数。
#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);}