我在3个数组a[0]
,a[1]
,a[2]
中有24位数据,需要计算乘法并除以某个常数,结果仍然是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。)有可能没有使用像数组到整数和整数到数组的转换过程吗?
答案 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,那么我建议你使用一个建议的代数建议。