用C语言实现四个字节数到一个整形数的转换。
比如:输入:x1=0x00,x2=0x01,x3=0xe2,x4=0x40输出:x=0x0001e2404个字节,即整形123456char?longint?我用int实...
比如:
输入:x1= 0x00,x2 = 0x01,x3 = 0xe2,x4=0x40
输出:x = 0x0001e240 4个字节,即整形123456
char ? long int ?我用int 实现3个字符串,4个移位就溢了啊。。咋办。。C啊。。 展开
输入:x1= 0x00,x2 = 0x01,x3 = 0xe2,x4=0x40
输出:x = 0x0001e240 4个字节,即整形123456
char ? long int ?我用int 实现3个字符串,4个移位就溢了啊。。咋办。。C啊。。 展开
3个回答
展开全部
#include <stdio.h>
int main(){
long int x1 = 0x00;
long int x2 = 0x01;
long int x3 = 0xe2;
long int x4 = 0x40;
long int result = (x1 << 24) + (x2 << 16) + (x3 << 8) + x4;
printf("0x%08lx, %ld\n", result, result);
return 0;
}
int main(){
long int x1 = 0x00;
long int x2 = 0x01;
long int x3 = 0xe2;
long int x4 = 0x40;
long int result = (x1 << 24) + (x2 << 16) + (x3 << 8) + x4;
printf("0x%08lx, %ld\n", result, result);
return 0;
}
更多追问追答
追问
好漂亮的程序。能问下为什么是左移24位?如果我有输入值scanf对x1234进行分别赋值,是不是
scanf("%x%x%x%x",&x1,&x2,&x3,&x4);???
追答
谢谢。
printf("0x%08lx, %ld\n", result, result);中的%ld应该是%lu以应对result比较大的情况。
通俗的说十六进制一位是4个二进制位。
0x00左移24是0x00000000,
0x01左移16是0x00010000,
0xe2左移8是0x0000e200,
0x40是0x00000040,
上面四个相加就是0x0001e240。
貌似scanf最好有个分割吧?
比如:
int x1, x2, x3, x4;
scanf("%x %x %x %x", &x1, &x2, &x3,&x4);
而且scanf 中的%后面的符号最好根据你的数据类型来定:
long int x1,x2,x3,x4;
scanf("%lx %lx %lx %lx" , &x1, &x2, &x3, &x4);
PS:用Long int 是不确定平台的int位数(32?16?其他?)时一种保守的做法,不一定好。
貌似在假设平台存储数字是高字节在低位的话,可以这样:
#include
unsigned int bytes2int(char x1, char x2, char x3, char x4);
int main(){
unsigned int result = bytes2int(0x00, 0x01, 0xe2, 0x40);
printf("0x%08lx, %lu\n", result, result);
}
unsigned int bytes2int(char x1, char x2, char x3, char x4){
unsigned int theInt = 0;
char * p = (char *)&theInt;
*p = x4;
p++;
*p = x3;
p++;
*p = x2;
p++;
*p = x1;
return theInt;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//nx[1..4]不能超过255
int cal(int nX1 , int nX2 , int nX3 , int nX4)
{
int nValue;
unsigned char *pbyValue = (unsigned char *)&nValue;
pbyValue[0] = nX4;
pbyValue[1] = nX3;
pbyValue[2] = nX2;
pbyValue[3] = nX1;
return nValue;
}
int cal(int nX1 , int nX2 , int nX3 , int nX4)
{
int nValue;
unsigned char *pbyValue = (unsigned char *)&nValue;
pbyValue[0] = nX4;
pbyValue[1] = nX3;
pbyValue[2] = nX2;
pbyValue[3] = nX1;
return nValue;
}
更多追问追答
追问
用指针干嘛?看不懂 0 0
追答
int是四字节32位,小端从低到高内存表示|-0-|-1-|-2-|-3-|, 0所在的字节表示最低的8位,以此类推。所以只要变成|-x4-|-x3-|-x2-|-x1-|就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
long x = 0;
x = (x1 >>24) | (x2 >>16) | (x3 >>8) | x4;
x = (x1 >>24) | (x2 >>16) | (x3 >>8) | x4;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询