当前位置: 代码迷 >> Android >> 关于Android C代码 变量拆分组合的有关问题
  详细解决方案

关于Android C代码 变量拆分组合的有关问题

热度:80   发布时间:2016-05-01 22:20:51.0
关于Android C代码 变量拆分组合的问题
Hi,

  在Android上有些运算有问题(C代码)

  4字节x2组成8字节 这里有两种做法:

1. 将8字节变量当做一个int[2]然后各自赋值

2. 将高4字节<<32 然后再 | 低4字节

 

这里,方法2没有问题。而方法一结果有误
请问可否有什么方法解决这个问题?

Thanks 

C/C++ code
//方法1 unsigned int HIGH_INT(unsigned long long d){     unsigned long long dcopy = d;     return ((unsigned int*)&dcopy)[1];}  unsigned long long MAKE_DBLINT(unsigned int high, unsigned int low){     unsigned long long build = low;     ((unsigned int*)&build)[1] = high;     return build;}  void printInt(unsigned long long l) {     unsigned int high = HIGH_INT(l),low = (unsigned int)l;     LOGV("high=%X low=%X",high,low); }//方法2 unsigned int HIGH_INT2(unsigned long long d) {               unsigned long long dcopy = d;      return (unsigned int)(dcopy>>32); }  unsigned long long MAKE_DBLINT2(unsigned int high, unsigned int low) {      unsigned long long build = low;      unsigned long long build2 = high;      build2 = build2 << 32;      build = build | build2;               return build; }  void printInt2(unsigned long long l) {      unsigned int high = HIGH_INT2(l),low = (unsigned int)l;      LOGV("high=%X low=%X",high,low); } JNIEXPORT void JNICALL Java_com_arcsoft_drmtest_Native_Test(JNIEnv *, jobject) {     unsigned int h = 0x10245670;     unsigned int l = 0x89ABCDEF;     printInt(MAKE_DBLINT(h,l));     printInt2(MAKE_DBLINT2(h,l));}


------解决方案--------------------
方法1要正确,需要目标平台是little-endian的,int是32位的。这两个条件满足吗?
------解决方案--------------------
在intel的PC上是正确的
但在Android上,ARM?
请考虑大小端问题!
------解决方案--------------------
你要进行位操作 何尝不选择位段了
------解决方案--------------------
探讨

灵异事件
在代码的某个角落加了两个LOGV之后
库奇迹般的可以用了
  相关解决方案