字节转换成int

banmiton 2010-09-11 04:42:49
有两个字节,如a[0]=0x00;a[1]=0xf1,如何将a[0]的低四位和a[1]转成int,即将0f1转成int?
若a[0]=0x01,a[1]=0xf1,即将1f1转成int?
...全文
490 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
linan870128 2012-06-27
  • 打赏
  • 举报
回复
有个函数byte2int,应该可以实现这个功能?
king1 2010-09-13
  • 打赏
  • 举报
回复
最简单的当然是定义一个联合
union byte2int
{
char arr[4];
int i;
};
wyfwx 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 freezezdj 的回复:]
C/C++ code

unsigned char a[2];
a[0]=0x01 & 0x0F;
a[1]=0xf1;

int i = 0;
i += (a[0]<<8);
i += a[1];
[/Quote]
zpjpiaoling 2010-09-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tianweishuiguo 的回复:]
int i = 0;
char *p = (char *)&i;
*(p+2) = a[0];
*(p+3) = a[1];
[/Quote]

会不会有字节序问题。
qrp_pig 2010-09-12
  • 打赏
  • 举报
回复

#define LOW_FOUR_BIT_MASK_DATA 0x0F

uint16 TransferToInt()
{
uint8 a[] = {0x00, 0xf1};
uint16 transResult ;

teansResult = (a[0] && LOW_FOUR_BIT_MASK_DATA ) << 8 + a[1] ;

result teansResult ;
}
ningweidong 2010-09-12
  • 打赏
  • 举报
回复
int i = ((int *)a)[0]
chenjelly 2010-09-12
  • 打赏
  • 举报
回复
若是BYTE类型,可以考虑用MAKEWORD之类的宏
王大军9527 2010-09-12
  • 打赏
  • 举报
回复
字节序分为大端字节序和小端字节序:
像x86的机器都是小端字节序,低位放在低地址位置,高位放在高地址位置;
像网络中传输的,使用大端字节序,存放规则反之。
所以先要判断机器是什么字节序,再进行转换:


int is_bigendian() //判断机器字节序
{
unsigned short num = 0x55aa; //0x55是num的高位,0xaa是num的低位
char *p = (char *)# //让p指向num的低地址

if(*p == 0x55) //若低地址的值是0x55的话,即是大端字节序
{
return 0;
}
else //反之....
{
return 1;
}
}
FrankerZ 2010-09-12
  • 打赏
  • 举报
回复
32位机器上:
char ch[2] = {0x01,0xf1};
int ch1 = ch[0]; //转换int
int ch2 = ch[1];
ch1 &= 0x000000ff; //去掉符号位
ch1 = ch1<<8;
ch2 &= 0x000000ff;
int n = ch1+ch2; //累加结果
FrankerZ 2010-09-12
  • 打赏
  • 举报
回复
32位机器上:
char ch[2] = {0x01,0xf1};
int ch1 = ch[0]; //转换int
int ch2 = ch[1];
ch1 &= 0x000000ff; //去掉符号位
ch1 = ch1<<8;
ch2 &= 0x000000ff; //累加结果
zpjpiaoling 2010-09-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tianweishuiguo 的回复:]
int i = 0;
char *p = (char *)&i;
*(p+2) = a[0];
*(p+3) = a[1];
[/Quote]
这段代码确实有字节序问题,
在pc机器上,用DevC++编译
char a[] = {0x1,0x2,};
//char b = 0;
int i = 0;
int j = 0;
char *p = (char *)&i;
*(p + 1) = a[0];
*(p) = a[1];

p = (char *)&j;
*(p + 2) = a[0];
*(p + 3) = a[1];
//printf("\n test b = %d\n", b);
cout<<"i = "<<i<<endl<<"j = "<<j;
如下程序,结果
i = 258
j = 33619968请按任意键继续. . .
东大坡居士 2010-09-11
  • 打赏
  • 举报
回复


int i = 0;
char *p = (char *)&i;
*(p+2) = a[0];
*(p+3) = a[1];

王大军9527 2010-09-11
  • 打赏
  • 举报
回复

#include <stdio.h>

int is_bigendian(void);

int main()
{
// unsigned char a[2] = {0x00, 0xf1};
unsigned char a[2] = {0x01, 0xf1};
short int *p;
int result;

if(is_bigendian == 0)
{
p = (short int *)&a[0];
}
else
{
// printf("Swap.\n");
/*swap ..*/
a[0] = a[0] + a[1];
a[1] = a[0] - a[1];
a[0] = a[0] - a[1];

p = (short int *)&a[0];
}

result = *p;
printf("0x%x\n", result);

return 0;
}

int is_bigendian()
{
short int n = 0x55aa;
char *p;

p = (char *)&n;

if(*p == 0x55)
return 0;
else
return 1;
}

zhujian888 2010-09-11
  • 打赏
  • 举报
回复
楼上正解。
每天回帖即可获得10分
冻结 2010-09-11
  • 打赏
  • 举报
回复

unsigned char a[2];
a[0]=0x01;
a[1]=0xf1;

int i = 0;
i += (a[0]<<8);
i += a[1];
garfieldking 2010-09-11
  • 打赏
  • 举报
回复
long HexToDem(unsigned long HexNum)
{
long DemNum=0;
char string[8];
sprintf(string,"%ld",HexNum);
DemNum=atol(string);
return DemNum;
}

69,368

社区成员

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

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