0

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 程序中检索到的,因此我无法控制我收到的格式......我需要发回一个字符串以便通过连接处理通信,这无济于事

4

2 回答 2

4

在 Pharo(如果我没记错的话,还有 Squeak)中,您可以使用:的类端#readFrom:base:方法。在 的情况下,这会给您一个整数值。IntegerInteger readFrom: self stringToMakeHex base: 1615'F'

如果我是你,我会将阅读和打印封装在一个新类中,例如HexString. 您可以on:在类端和+,-printOn:实例端实现。

更新:

要从String特定基本用途#printStringBase:(在 Pharo 中)或#printOn:base:(可能更便携)的整数中获取 a,如下所示12 printStringBase: 16:这评估为'C'

于 2014-04-17T04:58:33.990 回答
1

尝试这个:

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

要转换回来:

(sum printStringRadix: 16) 
于 2014-04-17T00:42:50.137 回答