我在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???**结果将是存储在b[0] = 00、b[1] =3A、b[2] = 97中的3A97h
我的问题是
1.)如何在写代码的过程中快速计算,指针在快速?如何在进程中使用指针?
2.)有没有可能不使用像数组到整数和整数到数组这样的转换过程?
发布于 2012-09-28 01:47:39
在这种情况下,我喜欢使用联合:
#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-28 00:47:01
下面是最简单的“解决方案”:
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];https://stackoverflow.com/questions/12626190
复制相似问题