c - C 中有类似 BinaryWriter 的东西吗?

标签 c buffer binary-data

我想在通过 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/

相关文章:

c - 文件指针是否导致代码中的段错误

c - 二进制补码 ~0 签名

java - 如何检查文件是否为纯文本?

c++ - 我想在我的 objective -c 项目中读取 .bin 文件并相应地解析数据

c++ - 在 C++ 和 C 中的现有选项卡中打开 URL

c - 如何在 C 中操作 RSA 算法的大整数?

types - 克隆特性 BufRead 的行时类型不匹配

linux - 通过 GDB 运行程序时函数位置是否改变?

c# - 使用它的指针从托管 C# 中释放非托管内存

python - 将 ASCII 铠装输出转换为二进制数据