C中的“拆包”

Posted

技术标签:

【中文标题】C中的“拆包”【英文标题】:"Unpacking" in C 【发布时间】:2016-01-22 02:28:41 【问题描述】:

我正在将一个脚本从 python 重写为 C。我对 C 比较陌生。

我在 PYTHON 中有一个变量,其中包含以下值:

x = [chr(113),chr(80),chr(191),chr(70)]

y = "".join(x)

这将返回 y 的值:

y = qP¿F           #this is string

现在我要做的是解压这个变量,将它存储到变量 z 以获得我想要的结果。像这样:

z = struct.unpack("<f",y)
print z[0]  #unpack returns a tuple of size 1

我得到的值是:

x = 24488.2207

这对我来说是正确的。

我想知道 C 中是否有相同的函数可以用于此目的?

【问题讨论】:

您只需将字节转换为浮点数。 【参考方案1】:

不需要这样的功能;如果字节序已经正确,编译器可以通过指针转换或union 类型自行处理这种情况。

uint8_t data[4] = 113, 80, 191, 70;

printf("%f\n", (double)(*(float*)data));

...

$ ./a.out 
24488.220703

【讨论】:

确实,如果在 C 语言中没有那么简单,那么其他语言就不需要提供库来模拟它了。

以上是关于C中的“拆包”的主要内容,如果未能解决你的问题,请参考以下文章

31python中的拆包

[网络知识]TCP协议中的粘包与拆包

详解啥是 TCP 粘包和拆包现象并演示 Netty 是如何解决的

Netty在Android开发中的应用实战系列——— 粘包 拆包 处理

python3中的参数*args

tcp粘包拆包