我想在通过 UDP 发送之前将其拼凑成一个二进制字符串。这将在非常小的 Linux 计算机上以 C 语言运行。我希望有某种方法可以在 C 中执行此操作,类似于我在 C# 中使用 BinaryWriter
执行此操作的方式。我希望能够将 int 作为 4 个字节推到 char 数组的末尾,将所有另一个字符串推到末尾,或者将短的 2 个字节推到末尾,等等。
我不太了解 C,每当我用 google 搜索一些东西时,C++ 总是会出现,但我无法编译 vector 或字符串流(sstream?)。它只是说它们未声明。
我是如何编译的:
gcc -o test test.c
我需要先构建一个 char*
,然后再将其传递到通过 UDP 端口发送的 sendto
。
最佳答案
您可以创建一个缓冲区,然后在填充时遍历数组。如果您想放入 int,您可以转换指针或使用 memcpy()
,然后在写入后,将步行器(指针)增加所写入内容的大小。困难在于将其读出为正确的尺寸,但如果您的订单被某些协议(protocol)禁止(也许您决定),那么您可以恢复它。例如:
void* buffer = malloc(1500);
void* walker = buffer;
uint32_t myVal = htonl(31415);
memcpy(walker, &myVal, sizeof(myVal);
walker += sizeof(myVal);
另请注意,您需要确保此类场景的发送方和接收方共享一个字节序方案(大字节序或小字节序[或转换])。这可以通过使用像 ntohs()
和 htons()
这样的函数来帮助实现,它们可以在主机特定格式和网络中立版本之间转换数字。
关于c - C 中有类似 BinaryWriter 的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19715727/