VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 728|回复: 2

数值转换

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-3-22 23:30:01 | 显示全部楼层 |阅读模式
一个由两个字节组成的16位的二进数,最高位为符号位,规定负数用其补码 ,
pVal[1]高字节 pVal[0] 低字节 要得到这个16位的二进制数该怎么转换?

short CMainFrame::Get2RealVal(BYTE* pVal)
{
        short Val=0 ;

        if(pVal[1]&0x80==0)
        {
                Val = pVal[1]*256 + pVal[0] ;
        }
        else
        {
                Val = pVal[1]*256 + pVal[0] ;
                Val = Val^0xffff + 1 ;
        }
       
        return Val ;
}

这么写有问题吗?
回复

使用道具 举报

0

主题

12

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-7-6 17:00:01 | 显示全部楼层
强制转换不行么?

short Val = *(short*)pVal

ps.前提目前系统是little endian
回复

使用道具 举报

0

主题

8

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-7-7 09:45:01 | 显示全部楼层
short val  = 0;
val= pVal[0] + pVal[1] * 256;

或者楼上的也OK,而且速度快
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表