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

关于4位16进制负数转10进制的问题,请帮忙看看
本帖最后由 zjgsky 于 2012-11-21 11:58:22 编辑
比如下位机真实数据是:-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位。

求转换函数,谢谢。
------解决方案--------------------
FF9C转成65436,那么用65436-65536不就=-100了?FF9C本来就存在二义性,它既可以表示-100也可以是65436
------解决方案--------------------
  觉得楼主可以这样定义变量,把你得到的转换为:Smallint 这个类型就可以解决你的问题了。

Smallint 就是十六位的整形; 如下:


procedure TForm2.Button4Click(Sender: TObject);
var
  iNum: Smallint;
begin
  iNum := StrToInt('$FF9C');
  ShowMessage(IntToStr(iNum));
end;
------解决方案--------------------
而真实的数据是-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;