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程序中检索出来的,所以我不能控制我接收的格式...没有帮助我需要发回一个字符串才能在整个过程中处理通信连接
答案 0 :(得分:4)
在Pharo(和Squeak,如果我没有记错的话),您可以使用#readFrom:base:
:Integer
的班级Integer readFrom: self stringToMakeHex base: 16
方法。
在15
的情况下,这会为您提供值'F'
的整数。
如果我是你,我会将阅读和打印封装在一个新课程中,例如: HexString
。您可以在课程方面实施on:
,在实例方面实施+
,-
和printOn:
。
要从特定基础中的整数中获取String
,请使用#printStringBase:
(在Pharo中)或#printOn:base:
(可能更具可移植性),如下所示:12 printStringBase: 16
。评估结果为'C'
。
答案 1 :(得分:1)
试试这个:
(Compiler evaluate: '16r', self stringToMakeHex)
转换回来:
(sum printStringRadix: 16)