数组到数组算术

时间:2012-09-27 16:42:32

标签: c arrays

我在3个数组a[0]a[1]a[2]中有24位数据,需要计算乘法并除以某个常数,结果仍然是3个数组。

例如,data = 999900h存储在a[0] = 99a[1] = 99a[2] = 00

[(999900h/64)*15000]/157286 << **process???**

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

我的问题是

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

2。)有可能没有使用像数组到整数和整数到数组的转换过程吗?

2 个答案:

答案 0 :(得分:1)

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

 uint32_t data = 0x00999900;

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

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


独立于字节顺序的解决方案以代数方式工作:

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]
                               };

您还可以从数组中重构一个值。这是依赖于字节顺序的方式:

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

以下是代数方式:

uint32_t data = a[0] * 256 * 256 * 256 + a[1] * 256 * 256 + a[2] * 256 + a[3];

答案 1 :(得分:0)

我喜欢在这种情况下使用工会:

#inlude<stdint.h>

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

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

请考虑到endianess。使用htonl如果你输入最重要的字节 - 最不重要,但是在一个小端系统上。如果你不想搞乱endianess,那么我建议你使用一个建议的代数建议。