簡體   English   中英

在Smalltalk中將字符串和整數轉換為十六進制

[英]Converting a string and an integer to a hex in smalltalk

TL; DR:如何將整數轉換為十六進制,還將如何將1字符串轉換為十六進制(即'F'-> 0xF)

希望將字符轉換為十六進制值,先做一些數學運算,然后再轉換回字符。

所以我有這樣的事情:

addBits: aValue move: action
"aValue is always either 5 or 10 (0xA)"
"move is either 'a' for add or 's' for subtract"

|sum conversion|

"self stringToMakeHex is the string, it's always either an 'F', 'A', '0', 
or '5' I need to turn it into either 0xF,0xA,0x0,or 0x5"
conversion := (self stringToMakeHex) asInteger.

(action = 's')
ifTrue:[sum:= conversion - aValue.]
ifFalse:[sum:=conversion + aValue.].

stringToMakeHex: (sum asString).

我知道我不應該做asInteger ,因為它會以某種方式將'F'轉換為零,所以我想知道是否有一個很好的方法可以從中獲取0xF甚至15。 我的另一個問題是aValue作為整數(5和10 base10)輸入,因此我需要一種方法來獲取十六進制值0x5和0xA。

所有這些數據都是通過TCP / IP從dif程序中檢索的,因此我無法控制接收的格式...這對我需要發送回字符串以便通過連接處理通信沒有幫助。

在Pharo中(如果我沒記錯的話,還有Squeak),您可以使用類方的#readFrom:base: Integer方法: Integer readFrom: self stringToMakeHex base: 16 對於'F'這將為您提供一個值為15的整數。

如果您是我,我HexString閱讀和打印內容封裝在一個新的類中,例如HexString 您可以在類方面實現+ on:在類方面;在實例方面實現+-printOn:

更新:

要從特定基數的整數中獲取String ,請使用#printStringBase:在Pharo中)或#printOn:base:可能更便於移植),例如: 12 printStringBase: 16 結果為'C'

嘗試這個:

(Compiler evaluate: '16r', self stringToMakeHex)

轉換回來:

(sum printStringRadix: 16) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM