는 워드는 16 비트의 부호없는 변수 (0..65535)Delphi의 "Word"는 Java의 "Char"와 동일한 변수입니까? 델파이
자바 숯 변수가 16 비트 유니 변수 (0..65535)이다
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
나는 t을 나는 자바에 델파이에
01 03 00 20 F0
및1 3 0 D8 D9
를 얻을for (Byte b : lst) S = S + String.format("%1X ", b);
내가 수행하여 값을 인쇄 할 때
procedure TForm1.ReadHoldRegisters(var lst: TList<byte>; deviceaddr: byte; RegisterAddress, RegisterLength: word); begin lst.Add(deviceaddr); lst.Add(3); lst.Add(RegisterAddress div 256); lst.Add(RegisterAddress mod 256); Add_CRC16(lst); end; procedure TForm1.Add_CRC16(var Data: TList<byte>); var CRC16Lo, CRC16Hi, CL, CH, SaveHi, SaveLo: byte; Flag: Integer; b: byte; begin CRC16Lo := $FF; CRC16Hi := $FF; CL := $1; CH := $A0; for b in Data do begin CRC16Lo := CRC16Lo Xor b; For Flag := 0 To 7 Do Begin SaveHi := CRC16Hi; SaveLo := CRC16Lo; CRC16Hi := CRC16Hi Div 2; CRC16Lo := CRC16Lo Div 2; If ((SaveLo And $1) = $1) Then Begin CRC16Hi := CRC16Hi Xor CH; CRC16Lo := CRC16Lo Xor CL; End; End; end; Data.Add(CRC16Lo); Data.Add(CRC16Hi); end;
델파이에 다음 코드 그는 그리고 자바
public void ReadHoldRegisters(List<Byte> lst, byte deviceaddr, char RegisterAddress, char RegisterLength) { lst.add(deviceaddr); lst.add((byte) 3); lst.add((byte) (RegisterAddress/256)); lst.add((byte) (RegisterAddress%256)); Add_CRC16(lst); } private void Add_CRC16(List<Byte> Data) { char SaveLo, SaveHi; int flag; char CRC16Lo = 0xFF; char CRC16Hi = 0xFF; char CL = 0x1; char CH = 0xA0; // início do for in for (Byte b : Data) { CRC16Lo = (char) ((CRC16Lo)^b); for(flag=0;flag<7;flag++) { SaveHi = CRC16Hi; SaveLo = CRC16Lo; CRC16Hi = (char) (CRC16Hi/2); CRC16Lo = (char) (CRC16Lo/2); /* if((SaveHi & 0x1) == 0x1) { CRC16Lo = ((char) (CRC16Lo|0x80)); } */ if((SaveLo & 0x1) == 0x1) { CRC16Hi = ((char) (CRC16Hi^CH)); CRC16Lo = ((char) (CRC16Lo^CL)); } } } // fim do for in CRC16Hi = (char) (CRC16Hi & 0xffff); CRC16Lo = (char) (CRC16Lo & 0xffff); Data.add((byte) CRC16Lo); Data.add((byte) CRC16Hi); }
에 상응입니다 .
char 및 word가 동등한 변수라고 가정 할 때 RegisterAddress 및 RegisterLength에 어떤 문제가 있습니까?
델피'워드 '는 부호없는 16 비트 타입입니다. 나는 자바'char'이 같다고 생각한다. 그 차이가 엔디안 일 수 있습니까? 자바는 빅 엔디안이고 델파이는 리틀 엔디안입니다. –
다른 제안은 디버깅을하는 것입니다. 왜 무력하니? 각 프로그램에 중간 값을 기록하십시오. 프로그램의 분기점을 발견하십시오. 그러면 문제를 이해하게 될 것입니다. 그리고 스스로 해결할 수 있어야합니다. –
차이가 엔디안 인 경우 전체 코드에 대한 변경 사항일까요 아니면 최종 값일까요? – Machado