将unsigned char数组的内容分成两半

我想知道是否有人可以帮助我我只学习c,我试图将unsigned char数组的内容分成两半,结果可以存储在两个unsigned int中,

例如,我在下面有一些代码将hex值添加到BYTE数组中,那么如何将val []的内容分成两个但保持相同的顺序

#include  typedef unsigned char BYTE; int main() { // Sample purposes putting hex into val[8] int i,j; long long hex=0x78661EB54FE76763; BYTE val[8]; for(j=0,i=7; i>=0; i--,j++){ val[j]= (hex>>(i*8))&0xff; } // How to split the contents of val[8] which now holds the hex return 0; } 

我试图将hex值拆分为78661EB5,4FE76763并将每个值存储在unsigned int中,该值存储在我的示例中的val [8]中

你的变量long long hex不是“char数组”,但是你可以尝试这样的东西,注意整个中的无符号类型。

 #include  #include  int main(void) { uint64_t hex = 0x78661EB54FE76763; uint32_t lo, hi; hi = hex >> 32; lo = hex & 0xFFFFFFFF; printf("%08X %08X\n", hi, lo); return 0; } 

节目输出:

 78661EB5 4FE76763 

创建一个辅助函数,它接受一个指向unsigned char数组的指针并调用它两次。

留下一些东西让OP发现。

 unsigned long form_big_endian4(const unsigned char * x) { unsigned long y = TBB; // What should the initial value be? for (int i = 0; i < TBD; i++) { // How many times to loop? y *= TBD; // Hint: max value of 8 bits + 1 y += x[i]; } return y; } #include  int main(void) { const unsigned char val[8] = { 0x78, 0x66, 0x1E, 0xB5, 0x4F, 0xE7, 0x67, 0x63 }; unsigned long half = form_big_endian4(val); // Why long: Hint how small can unsigned be? printf("%08lX\n", half); // Why 0 in format? Why `lX`? half = form_big_endian4(val + TBD); // How far an offset? printf("%08lX\n", half); return 0; }