关于计算16进制数值的问题!!!(200)

  • 主题发起人 主题发起人 tiger_520
  • 开始时间 开始时间
T

tiger_520

Unregistered / Unconfirmed
GUEST, unregistred user!
如有16进制数0X32A91BBA,我想得到这个16进制数的字节长度数,如为4字节,则需要分别得到第一个字节、第二个字节、第三个字节、第四个字节的数值是多少!有没有办法呢?
 
好像很困难,不是你要得到的是16进制的还是什么的没说清除!
 
如果这个16进制数表现为字符串形式。那么(Length('0x32A191BBA')-2) div 2就是字节数了。要得到每一个字节的值当然可以。但是对于整数 你应该说高权值字节还是低权值字节 而不应该说第一第二……。我假定你的顺序是从紧接着0x开始。写个函数 用字节数组的形式输出某个16进制编码数值的所有字节值。function (strHex:string;var Bytes:array of Byte):Integer;var i:Integer;begin i:=3; Result:=0; while i<Length(strHex) do begin Bytes[Result]:=StrToInt('$'+Copy(strHex,i,2)); Inc(i,2); Inc(Result); end;end;
 
procedure TForm1.Button1Click(Sender: TObject);type Pmyrd=^Tmyrd; Tmyrd=record G1:byte; G2:byte; G3:byte; G4:byte;end;var i:integer; RD:Pmyrd; ru:byte;begin //1 i:=$32A91BBA; rd:=Pmyrd(@i); showmessage(inttohex(rd.G2,2));//G1=BA windows 低字节在前 //2 ru:=i shr 16;//2(位数)*8(字节长) showmessage(inttohex(ru,2));end; //2个方法应该都可以的,lz看看
 
4个字节是不是该用longword?
 
baiduan,为什么用你的方法,show出来的信息,两个不一样呢?
 
//shr:是指 右位移, 1个字节8位Bit.2(字节数)*8(字节长)//注意 RU的数据类型 byte,强制转换后,就是i的第一个byte.ru:=byte(i);ru:=i shr 8;ru:=i shr 16;ru:=i shr 24; 楼主测试下看看行不.
 
Byte1 := (i shr 3*8) and $FF;Byte2 := (i shr 2*8) and $FF;Byte3 := (i shr 1*8) and $FF;Byte4 := i and $FF;
 
后退
顶部