1

TL;DR:如何将 4 个数字相加并将答案存储为代表十六进制值的字符串(即 10+5 存储为“F”,或 2+1 存储为“3”)

.

这在 HERE 之前被问过一次,但没有一个答案足以满足我的申请。我将在下面展示我的操作方式以及我想在评论中得到什么:

| response bit1 bit2 bit3 bit4 addedBits objStatus|
"are objects on station1?"
(self robot hasWaferAt: 1)
ifTrue:[bit1:=2r1000.bit3:=2r10.]
ifFalse:[bit1:=2r0000.bit3:=2r00.]. 
"are objects on station2?"
(self robot hasWaferAt:  2)
ifTrue:[bit2:=2r100.bit4:=2r1.]
ifFalse:[bit2:=2r000.bit4:=2r0.].
addedBits := (((bit1 bitOr: bit2)bitOr: bit3)bitOr: bit4).

在这里,我需要 objStatus 将 addedBits 保存为字符串(即,如果 addedBits 为 13,waferStatus 需要保存“D”或“D”),因为然后我通过 TCPIP 传输此字符串:

response := (myCommand getUnitNumberFromResponse: aCommandString),
(myCommand getSequenceNumberFromResponse: aCommandString),
'0000',     "Ack code"
'0000',     "error code:  0000 is success."
waferStatus, "which stations have objects"
'FFF'.       "no objects present = FFFF"
response := (myCommand commandResponsePrefix), 
             response,
             (myCommand computeChecksum: response).
self sendMessage: response.      
4

2 回答 2

3
(10 + 5) asBigEndianByteArray asHexString
=> '0F'

应该足够了。数字本身似乎没有asHexString等价物,因此我们必须将数字转换为ByteArray第一个。

如果您必须修剪前导0s,您可以执行以下操作:

[result allButLast startsWith: '0'] whileTrue: [result := result allButFirst].

(但有无数种方法可以做同样的事情......)

于 2015-01-27T21:38:47.853 回答
0
anInteger printStringRadix: 16.

例如:

15 printStringRadix: 16   ==> 'F'
于 2016-03-08T21:52:12.047 回答