首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组到数组算法

数组到数组算法
EN

Stack Overflow用户
提问于 2012-09-28 00:42:32
回答 2查看 383关注 0票数 0

我在3个数组a[0]a[1]a[2]中有24位数据,并且需要计算乘除一些常量,结果仍然在3个数组中。

例如,data = 999900h商店位于a[0] = 99a[1] = 99a[2] = 00

代码语言:javascript
复制
[(999900h/64)*15000]/157286 << **process???**

结果将是存储在b[0] = 00b[1] =3Ab[2] = 97中的3A97h

我的问题是

1.)如何在写代码的过程中快速计算,指针在快速?如何在进程中使用指针?

2.)有没有可能不使用像数组到整数和整数到数组这样的转换过程?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-28 01:47:39

在这种情况下,我喜欢使用联合:

代码语言:javascript
复制
#inlude<stdint.h>

union array_int {
  char a[4];
  uint32_t num;
} data = {.a = {00, 99, 99, 00}};

printf("%d", data.num);

请考虑字符顺序。如果你输入的字节是最重要的--从最不重要的字节到最不重要的字节,但使用的是小端系统,则使用htonl。如果你不想打乱字符顺序,那么我建议你使用建议的代数建议之一。

票数 0
EN

Stack Overflow用户

发布于 2012-09-28 00:47:01

下面是最简单的“解决方案”:

代码语言:javascript
复制
 uint32_t data = 0x00999900;

 unsigned char const * a = (unsigned char const *)&data;

现在你有了a[0],...,a[3]。顺序取决于系统的字节顺序。

与字节顺序无关的解决方案以代数方式工作:

代码语言:javascript
复制
uint32_t data = 0x3A97;

unsigned char b[sizeof data] = {  data >> 24  & 0xFF,       // b[0]
                                 (data >> 16) & 0xFF,       // b[1]
                                 (data >>  8) & 0xFF,       // b[2]
                                  data        & 0xFF        // b[3]
                               };

您还可以从数组中重新构造一个值。以下是依赖于字符顺序的方法:

代码语言:javascript
复制
uint32_t data;
unsigned char * p = (unsigned char *)&data;
p[0] = 0x00;
p[0] = 0x99;
p[0] = 0x99;
p[0] = 0x00;

// now "data" is 0x00999900

下面是代数方法:

代码语言:javascript
复制
uint32_t data = a[0] * 256 * 256 * 256 + a[1] * 256 * 256 + a[2] * 256 + a[3];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12626190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档