0

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

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

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

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

我的问题是

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

2.) 可以不使用数组到整数和整数到数组的转换过程吗?

4

2 回答 2

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];
于 2012-09-27T16:47:00.900 回答
0

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

#inlude<stdint.h>

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

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

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

于 2012-09-27T17:47:39.157 回答