首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

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

2012-03-21 
关于Android C代码 变量拆分组合的问题Hi,在Android上有些运算有问题(C代码)4字节x2组成8字节 这里有两种

关于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之后
库奇迹般的可以用了

热点排行