int转成long的问题!

zetor_major 2010-02-02 02:28:02
UINT32 iData[] = {0x05060708,0x090A0B0C};
UINT64 iTemp;

现在取出iDATA数组里第一个元素中的后24位,即060708, 与第二个元素中的前16位,即090A。
我现在想把他们连接起来存到iTemp里,即 060708090a。怎么来实现呢?
...全文
433 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackyjkchen 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 z2926781 的回复:]
9楼的方法没问题,用long确实不行。
我有个疑问,用windows.h头 中的uint64的类型定义就无错,
我自己定义typedef unsigned long long UINT64就报错;
error C2632: 'long' followed by 'long' is illegal

我想知道 windows.h头 中的uint64的原型,
还有为什么windows.h中没有uint8类型
回答完马上结贴
[/Quote]
VC6不支持longlong语法……VS08没错,VC6得用__int64表示
shellfish567 2010-02-02
  • 打赏
  • 举报
回复
iTMP=(iData[0]<<(32-24))|(iData[0]>>(32-16));
太乙 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 z2926781 的回复:]
9楼的方法没问题,用long确实不行。
我有个疑问,用windows.h头 中的uint64的类型定义就无错,
我自己定义typedef unsigned long long UINT64就报错;
error C2632: 'long' followed by 'long' is illegal

我想知道 windows.h头 中的uint64的原型,
还有为什么windows.h中没有uint8类型
回答完马上结贴
[/Quote]
 #include <iostream>  
using namespace std;

int main()
{
typedef unsigned long long ULONG;
ULONG mylong;
return 0;
}gcc下通过。。。。
赵4老师 2010-02-02
  • 打赏
  • 举报
回复
UINT32 iData[] = {0x05060708,0x090A0B0C};
UINT64 iTemp;

现在取出iDATA数组里第一个元素中的后24位,即060708, 与第二个元素中的前16位,即090A。
我现在想把他们连接起来存到iTemp里,即 060708090a。怎么来实现呢?

iTemp=(((UINT64)(iData[0]&0x00FFFFFFu))<<16)|((UINT64)(iData[1]>>16));
zetor_major 2010-02-02
  • 打赏
  • 举报
回复
9楼的方法没问题,用long确实不行。
我有个疑问,用windows.h头 中的uint64的类型定义就无错,
我自己定义typedef unsigned long long UINT64就报错;
error C2632: 'long' followed by 'long' is illegal

我想知道 windows.h头 中的uint64的原型,
还有为什么windows.h中没有uint8类型
回答完马上结贴
  • 打赏
  • 举报
回复

((iDate[1] & 0xFFFF0000) << 8) | (iDate[0] &0x00FFFFFF)

不知道这个可以不??
太乙 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tan870426 的回复:]
引用 5 楼 hqin6 的回复:
C/C++ codeint main()
  {
      unsignedint  iData[]= {0x05060708,0x090A0B0C};longlong iTemp= iData[0] < <16| ((iData[1]&0xFFFF0000)>>16) ;
      cout < < hex < < iTemp < < endl;return0;
  }
这种方法就可以
[/Quote]不可以,得用8L的代码!因为溢出了。。。。。
太乙 2010-02-02
  • 打赏
  • 举报
回复

i'm wrong


int main()
{
unsigned int iData[] = {0x05060708,0x090A0B0C};
long long iTemp = ((long long)(iData[0] & 0x00FFFFFF) << 16) | ((iData[1] & 0xFFFF0000) >> 16) ;
cout << hex << iTemp << endl;
return 0;
}

tan870426 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hqin6 的回复:]
C/C++ codeint main()
{
unsignedint iData[]= {0x05060708,0x090A0B0C};longlong iTemp= iData[0]<<16| ((iData[1]&0xFFFF0000)>>16) ;
cout<< hex<< iTemp<< endl;return0;
}
[/Quote]这种方法就可以
太乙 2010-02-02
  • 打赏
  • 举报
回复
UINT64 iTemp; 不够存储的。。。。
太乙 2010-02-02
  • 打赏
  • 举报
回复
  int main()
{
unsigned int iData[] = {0x05060708,0x090A0B0C};
long long iTemp = iData[0] << 16 | ((iData[1] & 0xFFFF0000) >> 16) ;
cout << hex << iTemp << endl;
return 0;
}
qulcc 2010-02-02
  • 打赏
  • 举报
回复
移位 和 位运算
phpjspasp 2010-02-02
  • 打赏
  • 举报
回复
( iData[0] & 0x00FFFFFF ) | ( iData[0] & 0xFF000000 )
Arnold9009 2010-02-02
  • 打赏
  • 举报
回复
iTemp = ((iData[0] << 16) & 0x0FFFFFFFFFF) | ((iData[1] >> 16) & 0x0FFFF);
太乙 2010-02-02
  • 打赏
  • 举报
回复
iData[0] << (32-24) | (iData[1] & 0xFFF00000 >>20)

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧