5

我正在努力通过 C 中的套接字发送加密数据。一切正常,直到我意识到正在发送的数据的大小比它应该的要大得多。下面的一段代码描述了这种情况:

#include <stdlib.h>
#include <stdio.h> 
#include <string.h>

int main() {
    char temp[100], buffer[100];
    int n = 1234567890;
    sprintf(temp, "%d", n);
    printf("Original n has size: %d\n", sizeof(n)); // 4
    printf("Buffer size: %d\n", strlen(temp));      //10
    printf("Buffer: %s", temp);
}

问题是原始数字存储为 4 字节整数,而缓冲区是逐字符存储的,因此通过套接字发送的不是 4 个字节,而是 10 个一字节字符。

我想知道有没有办法将二进制数据作为原始数据发送?

4

1 回答 1

10

更仔细地检查send(2)系统调用。它接受const void *buf. 它不是 char*。就目前而言,void *您可以发送任何类型的数据。

这应该工作,

int n = 1234567890;
int net_n = hton(n);
send(sockfd, const (void *)(&net_n), sizeof(n), 0)
于 2012-10-21T09:40:06.080 回答