在缓冲区中强制转换指针

用户名

假设我有一个充满数据的缓冲区,并且我将其从网络上删除了。

uint8_t buffer[100];

现在,假设该缓冲区具有不同的字段。有些是1字节,有些是2字节,有些是4字节。所有这些字段都打包在缓冲区中。

现在假装我想获取16位字段之一的值。假设在缓冲区中,字段的存储方式如下:

buffer[2] = one byte of two byte field
buffer[3] = second byte of two byte field

我可以这样获取该值:

uint16_t* p_val;

p_val = (int16_t*) &buffer[2];
or
p_val = (int16_t*) (buffer + 2);

printf("value: %d\n", ntohs(*p_val));

这种方法有什么问题吗?还是我应该注意的对齐问题?

约翰·布林格

正如评论中提到的那样,是的,您提出的方法存在问题。尽管它可能在目标计算机上工作,或者可能在给定的情况下工作,但通常在不同指针类型之间进行转换是不安全的。(有例外。)

为了正确考虑对齐方式和字节顺序,您可以这样做:

union convert {
    uint32_t word;
    uint16_t halfword[2];
    uint8_t bytes[4];
} convert;

uint16_t result16;

memcpy(convert.bytes, buffer + offset, 2);

/* assuming network byte order: */
result16 = ntohs(convert.halfword[0]);

如果您控制数据格式,那么网络字节顺序是一个不错的选择,因为程序不需要显式确定,假设或知道运行它的计算机的字节顺序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

强制在scanf中清除缓冲区

来自分类Dev

将无符号char *缓冲区强制转换为可以接受参数的可调用void指针

来自分类Dev

如何使用指针从 C 中的缓冲区映射结构并进行转换

来自分类Dev

C缓冲区指针

来自分类Dev

如何强制MPlayer在帧缓冲区中留下碎片?

来自分类Dev

将指向内存缓冲区的指针转换为指向VLA的指针

来自分类Dev

将char指针转换为int指针-缓冲区错误10

来自分类Dev

强制缓冲区溢出以了解

来自分类Dev

从`NSValue`获取缓冲区指针

来自分类Dev

整数指针缓冲区跳过索引

来自分类Dev

了解文件指针和缓冲区

来自分类Dev

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到文件

来自分类Dev

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到列表

来自分类Dev

强制转换为Unicode:需要字符串或缓冲区,找到标记

来自分类Dev

TypeError:强制转换为Unicode,需要字符串或缓冲区,找不到NoneType

来自分类Dev

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到int

来自分类Dev

Python TypeError:强制转换为Unicode:需要字符串或缓冲区,找到元组

来自分类Dev

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到ResultSet

来自分类Dev

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到文件(open()函数)

来自分类Dev

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到了PosixPath

来自分类Dev

Python MQTT:TypeError:强制转换为Unicode:需要字符串或缓冲区,发现布尔

来自分类Dev

强制转换为Unicode:需要字符串或缓冲区,找到列表

来自分类Dev

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到文件(open()函数)

来自分类Dev

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到WSGIRequest

来自分类Dev

引发异常时出现“ TypeError:强制转换为Unicode:需要字符串或缓冲区”

来自分类Dev

Python:TypeError: 强制转换为 Unicode: 需要字符串或缓冲区,找到文件

来自分类Dev

Django 错误强制转换为 Unicode:需要字符串或缓冲区

来自分类Dev

将流转换为缓冲区?

来自分类Dev

C缓冲区转换为int

Related 相关文章

  1. 1

    强制在scanf中清除缓冲区

  2. 2

    将无符号char *缓冲区强制转换为可以接受参数的可调用void指针

  3. 3

    如何使用指针从 C 中的缓冲区映射结构并进行转换

  4. 4

    C缓冲区指针

  5. 5

    如何强制MPlayer在帧缓冲区中留下碎片?

  6. 6

    将指向内存缓冲区的指针转换为指向VLA的指针

  7. 7

    将char指针转换为int指针-缓冲区错误10

  8. 8

    强制缓冲区溢出以了解

  9. 9

    从`NSValue`获取缓冲区指针

  10. 10

    整数指针缓冲区跳过索引

  11. 11

    了解文件指针和缓冲区

  12. 12

    TypeError:强制转换为Unicode:需要字符串或缓冲区,找到文件

  13. 13

    TypeError:强制转换为Unicode:需要字符串或缓冲区,找到列表

  14. 14

    强制转换为Unicode:需要字符串或缓冲区,找到标记

  15. 15

    TypeError:强制转换为Unicode,需要字符串或缓冲区,找不到NoneType

  16. 16

    TypeError:强制转换为Unicode:需要字符串或缓冲区,找到int

  17. 17

    Python TypeError:强制转换为Unicode:需要字符串或缓冲区,找到元组

  18. 18

    TypeError:强制转换为Unicode:需要字符串或缓冲区,找到ResultSet

  19. 19

    TypeError:强制转换为Unicode:需要字符串或缓冲区,找到文件(open()函数)

  20. 20

    TypeError:强制转换为Unicode:需要字符串或缓冲区,找到了PosixPath

  21. 21

    Python MQTT:TypeError:强制转换为Unicode:需要字符串或缓冲区,发现布尔

  22. 22

    强制转换为Unicode:需要字符串或缓冲区,找到列表

  23. 23

    TypeError:强制转换为Unicode:需要字符串或缓冲区,找到文件(open()函数)

  24. 24

    TypeError:强制转换为Unicode:需要字符串或缓冲区,找到WSGIRequest

  25. 25

    引发异常时出现“ TypeError:强制转换为Unicode:需要字符串或缓冲区”

  26. 26

    Python:TypeError: 强制转换为 Unicode: 需要字符串或缓冲区,找到文件

  27. 27

    Django 错误强制转换为 Unicode:需要字符串或缓冲区

  28. 28

    将流转换为缓冲区?

  29. 29

    C缓冲区转换为int

热门标签

归档