[英]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.