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

怎么使用send()发送16进制数

2013-12-19 
如何使用send()发送16进制数。send(f_socket,buffer,strlen(buffer)+1,0)buffer我定义的是一个字符串,我想

如何使用send()发送16进制数。
send(f_socket,buffer,strlen(buffer)+1,0);
buffer我定义的是一个字符串,我想让它在发送的时候转换为16进制数发送出去。如何获得。
[解决办法]

引用:
send(f_socket,buffer,strlen(buffer)+1,0);
buffer我定义的是一个字符串,我想让它在发送的时候转换为16进制数发送出去。如何获得。

发送的字符串转成十六进制的可显字符,然后发送即可,不过不是16进制,发送的是对应的字串,如:
10发送的时候转成A,将“A”copy到发送缓冲区发送
[解决办法]
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
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);
    }
}

[解决办法]
发送端
memcpy(buffer,"\x0a\x0b",2);

假设0a0b就是你的十六进制命令...
接收端
if( memcmp(buffer,"\x0a\x0b",2) == 0 )
{
//do something
}

热点排行