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

将一串字符串或非正常字符串转换成一串十六进制数,如何解

2012-09-13 
将一串字符串或非正常字符串转换成一串十六进制数,怎么解?问题来源:我有一个程序 接受 客户端发来的消息,

将一串字符串或非正常字符串转换成一串十六进制数,怎么解?
问题来源:

我有一个程序 接受 客户端发来的消息,而这个消息呢 是二进制格式,假设这个消息为:0100000101000010

recv(buf,1024, fromport);
我将这个消息存入 字符数组char buf[1024] 中

那么 printf("%s",buf); 输出就是 AB。


问题是如何 将buf中的内容转换成16进制?
如此例 将buf内容转换后生成 char* newbuf = "6566";

假如 发来的这个二进制消息 并不能以ASCII解析,有大于126或小于32的字节。

那么buf 存入这些信息,已经不再是正常字符串了,如何再转换成16进制?

[解决办法]
应该用字节流(unsigned char [])来处理,不要用字符串,因为字符串不能包含0这个数据,字节流不需要结束符,前面传一个流的长度即可。
[解决办法]
转换成 16 进制还不简单啊..

for(int i = 0; i < buflen; ++i)
{
sprintf(&hexbuff[2*i], "%02X", buf[i]);
}
[解决办法]
1.如果消息是二进制
long val = ntohl(buf)
2, 如果是二进制的字符串
long val =0;
for(int i = 0; i < len ; ++i){
 val = val * 2 + buf[i] - '0';
}
[解决办法]

C/C++ code
void HexDump(char *buf,int len) {    int i,j,k;    char binstr[80];    for (i=0;i<len;i++) {        if (0==(i%16)) {            sprintf(binstr,"%04x -",i);            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);        } else if (15==(i%16)) {            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);            sprintf(binstr,"%s  ",binstr);            for (j=i-15;j<=i;j++) {                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');            }            printf("%s\n",binstr);        } else {            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);        }    }    if (0!=(i%16)) {        k=16-(i%16);        for (j=0;j<k;j++) {            sprintf(binstr,"%s   ",binstr);        }        sprintf(binstr,"%s  ",binstr);        k=16-k;        for (j=i-k;j<i;j++) {            sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');        }        printf("%s\n",binstr);    }} 

热点排行