светская беседа: как превратить int в строку его шестнадцатеричного значения? (изобразительные работы)

TL;DR: как сложить вместе 4 числа и сохранить ответ в виде строки, представляющей шестнадцатеричное значение (например, 10+5, сохраненное как «F», или 2+1, сохраненное как «3 ")

.

Об этом уже спрашивали ЗДЕСЬ, но ни один из ответов не является достаточным для моего приложения. Я покажу, как я работаю ниже, и что я хотел бы получить в комментариях:

| 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 хранил addBits в виде строки (т. е. если addBits равен 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.      

person Medic3000    schedule 27.01.2015    source источник


Ответы (1)


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

должно хватить. Похоже, что у самих чисел нет эквивалента asHexString, поэтому сначала нам нужно преобразовать число в ByteArray.

Если вам нужно обрезать ведущие 0, вы можете сделать что-то вроде следующего:

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

(но есть бесчисленное множество способов сделать то же самое...)

person Leo    schedule 27.01.2015
comment
Спасибо! работает намного лучше, чем мое исправление «Франкенштейн». Я делал серию из 4 вложенных операторов if, чтобы проверить каждый из 4 возможных результатов. явно это улучшение - person Medic3000; 28.01.2015