仅供参考:void HexDump(char *buf,int len,int addr) {
    int i,j,k;
    char binstr[80];    for (i=0;i<len;i++) {
        if (0==(i%16)) {
            sprintf(binstr,"%08x -",i+addr);
            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);
    }
}
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

解决方案 »

  1.   

    这个char FAR * 类型其实是为了兼容性
    准确的讲,这个数据是 void * ,单位是 sizeof(char) 整数倍
    也就是 需要你自己强制进行转换的裸数据格式
    你在协议中使用了什么格式
    那么就用什么格式进行打印
    如果是字符串
    你可以强制转换成 const char *
    如果是32位整数 你可以强制转换成 __int32 *
      

  2.   

    recvfrom
    The recvfrom function receives a datagram and stores the source address.int recvfrom(
      SOCKET s,                   
      char FAR* buf,              
      int len,                    
      int flags,                  
      struct sockaddr FAR *from,  
      int FAR *fromlen            
    );
    Parameters

    [in] Descriptor identifying a bound socket. 
    buf 
    [out] Buffer for the incoming data. 
    len 
    [in] Length of buf. 
    flags 
    [in] Indicator specifying the way in which the call is made. 
    from 
    [out] Optional pointer to a buffer that will hold the source address upon return. 
    fromlen 
    [in, out] Optional pointer to the size of the from buffer.