我想组装一个二进制字符串,然后再通过UDP发送。这将在小型Linux计算机上以C语言运行。我希望有某种方法可以在C中执行此操作,类似于在C#中使用BinaryWriter进行此操作的方式。我希望能够将int作为4个字节推入char数组的末尾,将所有其他字符串推到末尾,或者推短至2个字节,等等。

我不太了解C,每次我用google搜索东西时,C ++总是出现,但是我无法获取vector或stringstream(sstream?)进行编译。它只是说他们没有被宣布。

我如何编译:

gcc -o test test.c


在将其传递到通过UDP端口发送的char*之前,我需要先构建一个sendto所有对象。

最佳答案

您可以创建一个缓冲区,然后在填充数组时对其进行遍历。如果要放入一个int,则可以强制转换指针或使用memcpy(),然后在写入后,将Walker(指针)的大小增加1。所写的东西。困难在于将其读取为正确的尺寸,但是如果您的订单受到某种协议的限制(可能由您决定),则可以将其恢复。例如:

void* buffer = malloc(1500);
void* walker = buffer;
uint32_t myVal = htonl(31415);
memcpy(walker, &myVal, sizeof(myVal);
walker += sizeof(myVal);


还要注意,您将需要确保此类场景的发送方和接收方共享一个字节序方案(大字节序或小字节序[或转换])。这可以通过使用ntohs()htons()之类的函数来实现,这些函数可以在主机特定格式和网络中性版本之间转换数字。

10-06 02:06