C语言32位数据反序的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言32位数据反序的问题相关的知识,希望对你有一定的参考价值。

例如有一个数据:unsigned int a=0x cf 4a a4 4e;
32位的无符号int类型,如何变换成为0x 4e a4 4a cf
就是8位一组反序过来。在线等。

这题用字符指针来实现,又快又简单。一个unsigned int数据共占32bit,也就是4个字节,而一个char数据占用1个字节。设一个unsigned int变量a,如果用一个char指针p指向a的数据存储区,则这个存储区就可以看成是一个由4字节构成的char数组了。然后只要对这个字符数组各元素进行交换处理即可。
#include "stdio.h"
void Swap(char *a, char *b)
char tmp = *a;
*a = *b;
*b = tmp;

void main( )
unsigned int x;
char *p;
scanf("%x", &x);
p = (char*)&x;
Swap(&p[0], &p[3]);
Swap(&p[1], &p[2]);
printf("%x\n", x);
参考技术A 可以用 移位和 & | 运算组合,也可以用联合体。
下面用 联合体。 大量数据 大端小端转换,自己写一个函数很方便。
#include <stdio.h>
#include <stdlib.h>

union uu
unsigned int i;
unsigned char c[4];
u;
main()
unsigned int a=0xcf4aa44e;
int i;
unsigned char c;
u.i= a;
c=u.c[0];u.c[0]=u.c[3];u.c[3]=c;
c=u.c[1];u.c[1]=u.c[2];u.c[2]=c;
a = u.i;
printf("%08x",a);
return 0;
本回答被提问者采纳
参考技术B #include<stdio.h>
struct fanxu

unsigned a;
unsigned b;
unsigned c;
unsigned d;
num;
main()

     //把2替换成8即可
    scanf("%2d%2d%2d%2d",&num.a,&num.b,&num.c,&num.d);   
    printf("%2d %2d %2d %2d\\n",num.d,num.c,num.b,num.a);

参考技术C 通过左移右移就可以实现,直接上代码
#include <stdio.h>
int main()

unsigned int a=0x12345678,b;
b=(a<<24)+(((a<<16)>>24)<<16)+(((a<<8)>>24)<<8)+(a>>24);
printf("%08x\n",b);
return 0;

编程题:输入任意一个4位数整数,将该数反序输出。求解

c语言

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) 

 int a,s,d,f,g,h,j,k,l;
 printf("请输入四位整数");
 scanf("%d",&a);
 s=a/1000;
 d=a%1000;
 f=d/100;
 g=d%100;
 h=g/10;
 j=g%10;
 k=j/1;
 printf("颠倒后的数字为%d%d%d%d",k,h,f,s);
 return 0;


参考技术A

c:

#include <stdio.h>
#include <stdlib.h>
int main()
    int n;
    printf("输入一个数:");
    scnaf("%d",&n);
    printf("反序输出:\\n");
    while(n!=0)
        printf("%d",n%10);
        n/=10;
    
    return 0;

追问

谢谢你,不过你好像理解错了我的意思

参考技术B

参考技术C 1234 4位 = 1*1000+2*100+3*10+4*1
方向
4*1000+3*100+2*10+1*1
看出规律来了没?
如果从1234中单独取1, 2 ,3, 4 我就不用说了吧?

这只是一种解法
还可以用字符串去解决
有不懂的在问追问

哦哦,懂了,谢谢

本回答被提问者采纳
参考技术D 什么语言写呢?追问

c语言

以上是关于C语言32位数据反序的问题的主要内容,如果未能解决你的问题,请参考以下文章

C语言怎么反序输出

C语言里,关于数据类型的大小问题

c语言整型范围是多少

C语言:写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串.

c语言,为啥int类型在16位系统中占2个字节,在32位系统中占4个字节?

64位系统下C语言中int值的取值范围