关于4位16进制负数转10进制的问题,请帮忙看看

zjgsky 2012-11-21 11:57:45
比如下位机真实数据是:-100

接收上来的字符串是:39 43 46 46

转成16进制就是 FF9C,使用函数转换成10进制 变成了 65436

现在使用的16进制转10进制函数,有问题只要是负数,转换出来数据不对:

Function HexToDec(const Value :string ) : string;  //十六进制转十进制
var
s : string;
begin
//如果Value前没有$符号,则加上#36,否则不用加
s := #36 + Value;
Result := IntToStr(StrToInt(s));
end;


而真实的数据是-100(16进制:FFFFFF9C)

有什么办法可以把 4位的16进制 转换成10进制的负数,就是怎么把前面的给补齐

下位机固定一个数据是4位。

求转换函数,谢谢。
...全文
424 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhz8000 2012-11-22
  • 打赏
  • 举报
回复
而真实的数据是-100(16进制:FFFFFF9C);如果一定要这个结果 可以使用下面的代码: procedure TForm2.Button4Click(Sender: TObject); var iNum: Smallint; iResult: Integer; begin iNum := StrToInt('$FF9C'); ShowMessage(IntToStr(iNum)); iResult := iNum; ShowMessage(IntToHex(iResult, 8)); end;
xhz8000 2012-11-22
  • 打赏
  • 举报
回复
觉得楼主可以这样定义变量,把你得到的转换为:Smallint 这个类型就可以解决你的问题了。 Smallint 就是十六位的整形; 如下: procedure TForm2.Button4Click(Sender: TObject); var iNum: Smallint; begin iNum := StrToInt('$FF9C'); ShowMessage(IntToStr(iNum)); end;
hsfzxjy 2012-11-21
  • 打赏
  • 举报
回复
FF9C转成65436,那么用65436-65536不就=-100了?FF9C本来就存在二义性,它既可以表示-100也可以是65436

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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