谁帮我看看给写一段源码,弄的我头都大了
我得到一个16进制的字符串 我想反转他
int sun=0x049293a1;
int kun;
我想让
kun=0xa1939204
谁能帮帮我
23 个解决方案
#1
#include<stdio.h>
#include<math.h>
main()
{
long a=0xa12,num=0;
int b[10];
int i=0,j;
while(a!=0)
{
b[i++]=a%16;
a=a/16;
}
for(j=0;j<i;j++)
num+=b[i-j-1]*pow(16,j);
printf("0x%x",num);
}
#2
long就那么大 数字不能太大
可以转成字符串做 那样就简单了
可以转成字符串做 那样就简单了
#3
楼主的反转没看懂啊
#4
大端小端的转换?
#5
啊。。。就是把 16进制的 049293A1 转换成 A1939204
#6
这样说楼主不会懂的 实现下
#8
_asm
{
lea esi,kun
mov ecx,0x049293a1
mov [esi],ecx
lea ebx,kun
mov ebx,[ebx]
}
我用汇编,这样最后得到EBX的值 就反转了 就是不知道C应该怎么写
#9
不是很难的吧,用字符串按照字节掉头就可以了。
只能用在整形的类型,浮点数应该不行,没试过。
只能用在整形的类型,浮点数应该不行,没试过。
#include <iostream>
int main()
{
using namespace std;
int sun, kun;
sun = 0x049293a1;
char* a = (char*)&sun;
char* b = (char*)&kun;
int len = sizeof(sun);
for (int i = 0; i < len; i++)
b[i] = a[len - i - 1];
cout << hex;
cout << "sun = "<< showbase << sun << endl;
cout << "kun = "<< showbase << kun << endl;
return 0;
}
#10
有点小错误,应该用unsigned char
而且没考虑负数的符号位。
而且没考虑负数的符号位。
#11
#include <iostream>
using namespace std;
int main()
{
int sun;
sun = 0x049293a1;
int i=4;
int result=0x0;
int t=0xff;
while(i>0)
{
result=result<<8;
result =result+(sun & t);
i--;
sun=sun>>8;
}
cout << "result = "<<hex<< showbase << result << endl;
return 0;
}
#12
#include <stdio.h>
int main()
{
struct EChar{
unsigned char a:4;
unsigned char b:4;
};
long ld = ld = 0x1a2b3c4dl;
EChar* p = (EChar*)&ld;
for(int i =0; i < sizeof(long); i++)
{
int t = (p->a == 0xa ? sizeof(long) - i : i);
printf("%x%x", p[t].a,p[t].b);
}
return 0;
}
#13
楼主的问题貌似是很具体的整型的大小端转换
一行即可
一行即可
int main()
{
int sun=0x049293a1;
int re=((sun & 0x0f0f0f0f) << 4) | ((sun & 0xf0f0f0f0) >> 4);
return 0;
}
#14
更正楼上,右移要考虑符号,转成无符号整数处理
int main()
{
int sun=0x049293a1;
int re=((sun & 0x0f0f0f0f) << 4) | ((unsigned int)(sun & 0xf0f0f0f0) >> 4);
return 0;
}
#15
是这样反转么?
/**
* @file i32rev.c
* @brief
*/
#include <stdio.h>
union i32ch {
int n;
char ch[4];
};
int main(int argc, char *argv[])
{
int sun = 0x049293a1;
int kun;
union i32ch ic;
char ch;
ic.n = sun;
ch = ic.ch[0];
ic.ch[0] = ic.ch[3];
ic.ch[3] = ch;
ch = ic.ch[1];
ic.ch[1] = ic.ch[2];
ic.ch[2] = ch;
kun = ic.n;
printf("%08x %08x\n", sun, kun);
return 0;
}
#16
简单啊!!!
这样不就OK了嘛
int sun = 0x049293a1;
int kun = 0xa1939204;
这样不就OK了嘛
#17
( ((v) << 24) | (((v) >> 24) & 0xff) | (((v) << 8) & 0xff0000) | (((v) >> 8) & 0xff00) )
#18
这个没必要吧,#14楼不是更简单?
#19
#include<stdio.h>
int main()
{
int sun=0x049293a1;
int kun=0;
int temp=0;
int i=0;
for(i=0;i<4;i++)
{
temp=0xff&sun>>(8*i);
kun=kun|temp<<(8*(3-i));
}
printf("%x",kun);
return 0;
}
int main()
{
int sun=0x049293a1;
int kun=0;
int temp=0;
int i=0;
for(i=0;i<4;i++)
{
temp=0xff&sun>>(8*i);
kun=kun|temp<<(8*(3-i));
}
printf("%x",kun);
return 0;
}
#20
14楼那个是错的把?这个应该是vc里面的这样用的,
#21
和VC有关系?反应不过来。求详解
#22
#define MAKEWORD(a, b) ((WORD)(((BYTE)(a)) | ((WORD)((BYTE)(b))) << 8))
#define MAKELONG(a, b) ((LONG)(((WORD)(a)) | ((DWORD)((WORD)(b))) << 16))
#define LOWORD(l) ((WORD)(l))
#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))
#define LOBYTE(w) ((BYTE)(w))
#define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))
typedef unsigned short WORD;
typedef unsigned char BYTE;
void ID_TO_DI(void)
{
int ID=0x1a2b3c4d;
WORD H_id=HIWORD(ID);//将ID高位0x1a2b赋给H_id
WORD L_id=LOWORD(ID);//将ID低位0x3c4d赋给L_id
BYTE szData[4];
BYTE *pCur=szData;
*pCur++=LOBYTE(L_id);//0x4d
*pCur++=HIBYTE(L_id);//0x3c
*pCur++=LOBYTE(H_id);//0x2b
*pCur++=HIBYTE(H_id);//0x1a
WORD id_H=MAKEWORD(szData[1],szData[0]);//0x4d3c
WORD id_L=MAKEWORD(szData[3],szData[2]);//0x2b1a
int ID_value=MAKELONG(id_L,id_H);//0x4d3c2b1a
}
上面定的 宏 VC++ 6.0和VS2008都有。
#23
呵呵,刚发现我看错楼主的题目了
#1
#include<stdio.h>
#include<math.h>
main()
{
long a=0xa12,num=0;
int b[10];
int i=0,j;
while(a!=0)
{
b[i++]=a%16;
a=a/16;
}
for(j=0;j<i;j++)
num+=b[i-j-1]*pow(16,j);
printf("0x%x",num);
}
#2
long就那么大 数字不能太大
可以转成字符串做 那样就简单了
可以转成字符串做 那样就简单了
#3
楼主的反转没看懂啊
#4
大端小端的转换?
#5
啊。。。就是把 16进制的 049293A1 转换成 A1939204
#6
这样说楼主不会懂的 实现下
#7
#8
_asm
{
lea esi,kun
mov ecx,0x049293a1
mov [esi],ecx
lea ebx,kun
mov ebx,[ebx]
}
我用汇编,这样最后得到EBX的值 就反转了 就是不知道C应该怎么写
#9
不是很难的吧,用字符串按照字节掉头就可以了。
只能用在整形的类型,浮点数应该不行,没试过。
只能用在整形的类型,浮点数应该不行,没试过。
#include <iostream>
int main()
{
using namespace std;
int sun, kun;
sun = 0x049293a1;
char* a = (char*)&sun;
char* b = (char*)&kun;
int len = sizeof(sun);
for (int i = 0; i < len; i++)
b[i] = a[len - i - 1];
cout << hex;
cout << "sun = "<< showbase << sun << endl;
cout << "kun = "<< showbase << kun << endl;
return 0;
}
#10
有点小错误,应该用unsigned char
而且没考虑负数的符号位。
而且没考虑负数的符号位。
#11
#include <iostream>
using namespace std;
int main()
{
int sun;
sun = 0x049293a1;
int i=4;
int result=0x0;
int t=0xff;
while(i>0)
{
result=result<<8;
result =result+(sun & t);
i--;
sun=sun>>8;
}
cout << "result = "<<hex<< showbase << result << endl;
return 0;
}
#12
#include <stdio.h>
int main()
{
struct EChar{
unsigned char a:4;
unsigned char b:4;
};
long ld = ld = 0x1a2b3c4dl;
EChar* p = (EChar*)&ld;
for(int i =0; i < sizeof(long); i++)
{
int t = (p->a == 0xa ? sizeof(long) - i : i);
printf("%x%x", p[t].a,p[t].b);
}
return 0;
}
#13
楼主的问题貌似是很具体的整型的大小端转换
一行即可
一行即可
int main()
{
int sun=0x049293a1;
int re=((sun & 0x0f0f0f0f) << 4) | ((sun & 0xf0f0f0f0) >> 4);
return 0;
}
#14
更正楼上,右移要考虑符号,转成无符号整数处理
int main()
{
int sun=0x049293a1;
int re=((sun & 0x0f0f0f0f) << 4) | ((unsigned int)(sun & 0xf0f0f0f0) >> 4);
return 0;
}
#15
是这样反转么?
/**
* @file i32rev.c
* @brief
*/
#include <stdio.h>
union i32ch {
int n;
char ch[4];
};
int main(int argc, char *argv[])
{
int sun = 0x049293a1;
int kun;
union i32ch ic;
char ch;
ic.n = sun;
ch = ic.ch[0];
ic.ch[0] = ic.ch[3];
ic.ch[3] = ch;
ch = ic.ch[1];
ic.ch[1] = ic.ch[2];
ic.ch[2] = ch;
kun = ic.n;
printf("%08x %08x\n", sun, kun);
return 0;
}
#16
简单啊!!!
这样不就OK了嘛
int sun = 0x049293a1;
int kun = 0xa1939204;
这样不就OK了嘛
#17
( ((v) << 24) | (((v) >> 24) & 0xff) | (((v) << 8) & 0xff0000) | (((v) >> 8) & 0xff00) )
#18
这个没必要吧,#14楼不是更简单?
#19
#include<stdio.h>
int main()
{
int sun=0x049293a1;
int kun=0;
int temp=0;
int i=0;
for(i=0;i<4;i++)
{
temp=0xff&sun>>(8*i);
kun=kun|temp<<(8*(3-i));
}
printf("%x",kun);
return 0;
}
int main()
{
int sun=0x049293a1;
int kun=0;
int temp=0;
int i=0;
for(i=0;i<4;i++)
{
temp=0xff&sun>>(8*i);
kun=kun|temp<<(8*(3-i));
}
printf("%x",kun);
return 0;
}
#20
14楼那个是错的把?这个应该是vc里面的这样用的,
#21
和VC有关系?反应不过来。求详解
#22
#define MAKEWORD(a, b) ((WORD)(((BYTE)(a)) | ((WORD)((BYTE)(b))) << 8))
#define MAKELONG(a, b) ((LONG)(((WORD)(a)) | ((DWORD)((WORD)(b))) << 16))
#define LOWORD(l) ((WORD)(l))
#define HIWORD(l) ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))
#define LOBYTE(w) ((BYTE)(w))
#define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))
typedef unsigned short WORD;
typedef unsigned char BYTE;
void ID_TO_DI(void)
{
int ID=0x1a2b3c4d;
WORD H_id=HIWORD(ID);//将ID高位0x1a2b赋给H_id
WORD L_id=LOWORD(ID);//将ID低位0x3c4d赋给L_id
BYTE szData[4];
BYTE *pCur=szData;
*pCur++=LOBYTE(L_id);//0x4d
*pCur++=HIBYTE(L_id);//0x3c
*pCur++=LOBYTE(H_id);//0x2b
*pCur++=HIBYTE(H_id);//0x1a
WORD id_H=MAKEWORD(szData[1],szData[0]);//0x4d3c
WORD id_L=MAKEWORD(szData[3],szData[2]);//0x2b1a
int ID_value=MAKELONG(id_L,id_H);//0x4d3c2b1a
}
上面定的 宏 VC++ 6.0和VS2008都有。
#23
呵呵,刚发现我看错楼主的题目了