关于4位16进制负数转10进制的有关问题,请帮忙看看
关于4位16进制负数转10进制的问题,请帮忙看看
比如下位机真实数据是:-100
接收上来的字符串是:39 43 46 46
转成16进制就是 FF9C,使用函数转换成10进制 变成了 65436
现在使用的16进制转10进制函数,有问题只要是负数,转换出来数据不对:
而真实的数据是-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;
比如下位机真实数据是:-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;