gpt4 book ai didi

c - 嵌入式系统上的指针转换,通过指针转换在 32 位变量上的字节指针

转载 作者:行者123 更新时间:2023-12-02 06:58:40 28 4
gpt4 key购买 nike

我必须读出一个 uint32_t 变量的字节,我见过这种我的一位同事的实现。我的问题是,如果该代码示例的行为在“几乎每个”32 位上都是可靠的微 Controller 。它是否可以在每个 32 位微 Controller 上工作,或者它是否是我所依赖的特定于平台的行为?P.S.:本例不考虑系统字节顺序。

uint8_t     byte0=0;
uint8_t byte1=0;
uint8_t byte2=0;
uint8_t byte3=0;
uint8_t *byte_pointer; //byte_pointer
uint32_t *bridge_pointer;//pointer_bridge between 32bit and 8 bit variable
uint32_t var=0x00010203;

bridge_pointer=&var; //bridge_pointer point to var
byte_pointer=(uint8_t *)(bridge_pointer); //let the byte_pointer point to bridge_pointer

byte0=*(byte_pointer+0); //saves byte 0
byte1=*(byte_pointer+1); //saves byte 1
byte2=*(byte_pointer+2); //saves byte 2
byte3=*(byte_pointer+3); //saves byte 3

提前致谢

最佳答案

您应该将 byte_pointer 声明为 unsigned char*,然后如果您在 little endian 上接受不同的输出,您的示例将正常工作。这是一个解决方案,它不依赖于字节顺序

uint8_t byte0 = var;
uint8_t byte1 = var>>8;
uint8_t byte2 = var>>16;
uint8_t byte3 = var>>24;

byte0 将是 LSB

关于c - 嵌入式系统上的指针转换,通过指针转换在 32 位变量上的字节指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25994665/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com