我想组装一个二进制字符串,然后再通过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()
之类的函数来实现,这些函数可以在主机特定格式和网络中性版本之间转换数字。