c/c++语言开发共享如何一次访问数组的多个元素?

我有一个数组uint8_t数据[256]。 但每个元素都是单字节。 我的数据总线长32位。 所以,如果我想访问32位,我会:

DATA = data [i] +(data [i + 1] << 8)+(data [i + 2] << 16)+(data [i + 3] << 24);

但是这会在每个1字节的内存中转换为4个单独的读取请求。

如何以1个事务的forms访问所有4个字节?

    如果您知道数据的字节序(或者如果您不关心),并且您的数据已对齐(或者具有字节寻址过程而您不关心效率),则可以将数据转换为uint32_t *并以4字节的卡盘访问它,如下所示:

     DATA = ((uint32_t *)data)[i/4]; 

    这当然假设i是4的倍数。

    只需将datauint32_t

     uint8_t data[256] = {1,2,3,4,5,6,7,8} ; int main(int argc, char **argv) { int index = 1 ; uint32_t d = *(uint32_t *)(data + index) ; printf ("%08xn", d) ; } 

    小端架构上的输出将是

     05040302 

    大端架构的输出将是

     02030405 

    但是,根据您的progam正在运行的处理器的体系结构,您可能会遇到内存对齐问题(如果您处理未对齐的内存,性能会受到影响,如果您的处理器不支持未对齐的内存寻址,甚至会崩溃)。

    也许您应该将数据存储为32位数组:

     uint32_t data[64]; DATA = data[i]; DATA = data[i+1]; ... 

    正如@dwayne-towell所提到的 – 你需要关心数据的字节顺序。 在一次交易中,它可能会像下面的例子一样实现:

     #include  #include  int main() { uint8_t data[256]; uint32_t i, *p; // Add some 32bit numbers p = (uint32_t *)data; for (i = 0; i < sizeof(data)/sizeof(uint32_t); ++i) { *(p++) = i; } // Print some 32bit numbers p = (uint32_t *)data; for (i = 0; i < sizeof(data)/sizeof(uint32_t); ++i) { printf("value=%un", *(p++)); } return (0); } 

      以上就是c/c++开发分享如何一次访问数组的多个元素?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/549599.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐