怎样将0x01 02 03 04转换成0x04 03 02 01

Ryoko7 2003-11-06 04:08:02
将形如0x01 02 03 04的整数转换成形如0x04 03 02 01
...全文
166 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunstarstar 2003-11-06
  • 打赏
  • 举报
回复
打错字了!!(不好意思)
Caoyu015(酷鱼一代) 的解法有点问题,原题的不是整个颠倒,而是部分颠倒
sunstarstar 2003-11-06
  • 打赏
  • 举报
回复
Caoyu015(酷鱼一代) 的解法有点问题,原题的不是整个颠倒,二是部分颠倒
heartlove 2003-11-06
  • 打赏
  • 举报
回复
一条汇编指令可以解决四字节的顺序交换问题
TianGuangZao 2003-11-06
  • 打赏
  • 举报
回复
unsigned result; -> unsigned int result;
不小心漏掉。
TianGuangZao 2003-11-06
  • 打赏
  • 举报
回复
殊途同归,此题解法甚多,我也来现丑。

+--------------+
| +----+ |
| | | |
01 02 03 04

分别交换 01 04 和 02 03。

#include <stdio.h>
int main()
{
unsigned int value = 0x01020304;
unsigned result;

result = ((value & 0x000000ff) << 24) +
((value & 0x0000ff00) << 8 ) +
((value & 0x00ff0000) >> 8 ) +
((value & 0xff000000) >> 24);

printf("0x%p\n", result);
return 0;
}
lovenoend 2003-11-06
  • 打赏
  • 举报
回复
主要原理就是把他分解成8 Bit,然后交换
Paris_Luo 2003-11-06
  • 打赏
  • 举报
回复
bestfyj(笑俊) 正解
hujun614 2003-11-06
  • 打赏
  • 举报
回复
抱歉,语法生疏了,括号一大堆。

int ConvertInt(int nSrc){
int ntarg= 0;
int i;
for(i=0;i<4;i++){
ntarg = ntarg | (((nSrc >> (8*i)) & 0x00ff )<<(8*(3-i)));
}
return ntarg;
}
arfi 2003-11-06
  • 打赏
  • 举报
回复
#include <stdio.h>

void main(void)
{
int num = 0x7896f3e4;
char *p;

p = (char *)#

p[0] ^= p[3];
p[3] ^= p[0];
p[0] ^= p[3];

p[1] ^= p[2];
p[2] ^= p[1];
p[1] ^= p[2];

printf("%x\n", num);
}
短歌如风 2003-11-06
  • 打赏
  • 举报
回复
x = ((x >> 24) &0xff) | ((x >>8) & 0xff00) | ((x << 8) & 0xff0000) | (x << 24);
bestfyj 2003-11-06
  • 打赏
  • 举报
回复
vc 下编译通过
#include <stdio.h>
void main()
{
unsigned a=0x01020304;
unsigned b=0;
int i;
for(i=0;i<4;i++)
b+=(((a>>(8*i))&0xff)<<((3-i)*8));
printf("%x\n",b);
}
祝你顺利
fierygnu 2003-11-06
  • 打赏
  • 举报
回复
用个union,交换字节:0<->3、1<->2。
union
{
int i;
char chs[4];
};
SCUM 2003-11-06
  • 打赏
  • 举报
回复
说明白点看
Caoyu015 2003-11-06
  • 打赏
  • 举报
回复
int value = 0x01020304, value2 = 0;
int mask = 0x80000000, mask1 = 0x00000001;
for( int i = 31; i > 16; i-- )
{
value2 |= ( value & mask ) >> i;
value2 |= ( value & mask1 ) << i;
mask >>= 1;
mask1 <<= 1;
}



jnlon 2003-11-06
  • 打赏
  • 举报
回复
颠倒过来输出不就完了

69,382

社区成员

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

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