-2

我想在通过 UDP 发送之前拼凑一个二进制字符串。这将在非常小的 Linux 计算机上以 C 语言运行。我希望有一些方法可以在 C 中执行此操作,类似于我BinaryWriter在 C# 中使用 a 执行此操作的方式。我希望能够将一个 int 作为 4 个字节推送到 char 数组的末尾,将所有另一个字符串推送到末尾,或者短为 2 个字节等。

我不太了解 C,每当我在谷歌上搜索某些东西时,C++ 总是会出现,但我无法编译矢量或字符串流(sstream?)。它只是说它们未声明。

我是如何编译的:

gcc -o test test.c

在将它传递到我通过 UDP 端口发送的位置之前,我需要char*构建一个全部。sendto

4

1 回答 1

0

您可以创建一个缓冲区,然后在填充时遍历数组。如果要放入一个 int,您可以强制转换指针或使用memcpy(),然后在写入后,将 walker(指针)增加所写入内容的大小. 困难在于将其读出为正确的尺寸,但如果您的订单被某些协议禁止(也许您决定),那么您可以恢复它。例如:

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

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

于 2013-10-31T20:17:05.127 回答