2013-10-09 139 views
-1

我目前使用。十六進制字符串的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十六進制字符

回答

0

嗯,我想我想通出來。

`currentAttackCount: Byte;` 

我把它提高到

currentAttackCount: Word; 

希望這將解決這個問題..錯過了它,因爲它是一個全局變量,有洙多碼。

+0

爲什麼使用全局變量?爲什麼你使用'Byte'和'Word'? Integer是本地整數類型,應該用於計數。 –

+0

我需要'0..65535'所以爲什麼不呢?它現在可以工作,'0xFFFF'不應該使用更多的反正。 – SSpoke

+0

當你使用unsigned循環變量運行for循環0到count-1時會發生什麼?使用Integer有什麼危害?只要將它用於所有計數和循環,並忘記考慮類型是否足夠大。你的方法會得到什麼?這就是導致這個問題的原因。而且你也必須放棄全球變數。它們也導致疼痛。 –

相關問題