2012-09-27 85 views
0

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

例如,data = 999900ha[0] = 99a[1] = 99a[2] = 00

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

结果将是店3A97hb[0] = 00b[1] =3Ab[2] = 97

我的问题是

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

2.)它可能不使用像数组整数和整数数组转换过程?

+3

这功课吗? –

+0

等等,所以你需要将每个数组中的每个元素合并为一个整数,那么什么?除数,乘数或其余部分来自哪里? – slugonamission

+0

原始数据是定点Q24并存储在char数组中,所以我必须转换以实现数据。 –

回答

0

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

#inlude<stdint.h> 

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

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

请把字节顺序考虑。使用htonl如果你把你的字节最重要 - 最不重要,但是在一个小端系统上。如果你不想混淆endianess那么我建议你使用建议的代数建议之一。

+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]; 
+0

但我的原始数据是[0] = 0x99 a [1] = 0x99 a [2] = 0x00 因此,我必须先将uint32_t转换为右?如果我不转换它有其他方式来做到这一点? –

+0

@memmo:更新! –