2010-12-06 52 views
0

如何通过windows套接字发送int(不使用第三方库)发送: 它需要(const char *)作为参数。通过winsocks传递int发送

我的尝试是送INT这样的:

unsigned char * serialize_int(unsigned char *buffer, int value) 
{ 
    /* Write big-endian int value into buffer; assumes 32-bit int and 8-bit char. */ 
    buffer[0] = value >> 24; 
    buffer[1] = value >> 16; 
    buffer[2] = value >> 8; 
    buffer[3] = value; 
    return buffer + 4; 
} 

但发送()要(为const char *)。我卡...

回答

1

啊,这很容易修复。编译器想要一个char*(目前忽略const),但是您传递的是unsigned char*,唯一真正的区别是编译器在操作时如何解释每个字节。因此,您可以轻松地将指针从unsigned char*投射到char*。这样:

(char*)serialize_int(...) 
+0

真的有帮助!刚添加自信:) 在服务器端,它看起来像: \t \t \t无符号字符阵列[4] = {PerIoData->缓冲器[0],PerIoData->缓冲器[1],PerIoData->缓冲器[ 2],PerIoData-> Buffer [3]}; \t \t \t \t \t \t无符号整型OUT =((数组[0] << 24)|(阵列[1] << 16)|(阵列[2] << 8)|(阵列[3])) ; – anton 2010-12-06 10:25:01

1
const int networkOrder = htonl(value); 

const result = send(socket, reinterpret_cast<const char *>(&networkOrder), sizeof(networkOrder), 0);