我目前使用。十六進制字符串的Delphi StrToInt WORD,UShort,16位十六進制失敗
下面是我格式化他們的幾個輸出,他們都在一起這樣。
E14802000003FA00014C0000031501A8
currentAttackCount := StrToInt('$' + Copy(CurHex, 17, 4));
Log('Packet = ' + CurHex + ' Count = ' + IntToStr(currentAttackCount) + ' STR = ' + '$' + Copy(CurHex, 17, 4));
格式化輸出
分組= E1 48 02 00 00 03 FA 00 [01 C] 00 00 03 15 01 A8 [計數= 76] [ STR = $ 014C]
數據包= E1 48 02 00 00 03 FA 00 [01 4D] 00 00 03 15 02 26 [Count = 77] [STR = $ 014D]
數據包= E1 48 02 00 00 03 FA 00 [01 4F] 00 00 03 15 02 26 [計數= 79] [STR = $ 014F]
正如可以看到STR
輸出是STR = $014C
代碼:'STR = ' + '$' + Copy(CurHex, 17, 4));
現在,如果你看一下StrToInt
currentAttackCount := StrToInt('$' + Copy(CurHex, 17, 4));
這幾乎是一樣的STR
所以不宜$014C
又名0x014C
被表示爲332
代替76
的76
似乎來自$014C
的$4C
又名0x4C
爲什麼它忽略第一個2
十六進制字符
爲什麼使用全局變量?爲什麼你使用'Byte'和'Word'? Integer是本地整數類型,應該用於計數。 –
我需要'0..65535'所以爲什麼不呢?它現在可以工作,'0xFFFF'不應該使用更多的反正。 – SSpoke
當你使用unsigned循環變量運行for循環0到count-1時會發生什麼?使用Integer有什麼危害?只要將它用於所有計數和循環,並忘記考慮類型是否足夠大。你的方法會得到什麼?這就是導致這個問題的原因。而且你也必須放棄全球變數。它們也導致疼痛。 –