В Smalltalk (или по крайней мере Squeak и Pharo), там портативный способ получить байты, которые составляют целое число, начиная со старшего значащего байта, сопровождаемого следующим больше всего, и так далее, независимо от различий порядка байтов через платформы?
1 -: (31 highBitOfMagnitude) do: [:i | Transcript show: (31 bitAt: i)].
Или что-то в этом роде.
Извините, я прочитал биты, а не байты. Значит, вам нужно объединить биты в байты. Предполагая, что вы имеете в виду байт = 8 бит, это должно быть "выполнимо"
.Вы знаете, что байтов может быть много? Целые числа могут иметь произвольный размер, при этом SmallInteger является прямым 31-битным объектом (в 32-битном изображении)
Попробуйте digitAt: и digitAt:put::
(333 digitAt: 1) hex '4D'
Роберт прав: digitAt: idx извлекает байт, начиная с индекса 1 (как обычно) для младшего байта. digitLength дает вам количество цифр.
Итак, чтобы перечислить использование:
n digitLength downTo:1 do:[:idx | do something with (n digitAt:idx)]
Я не уверен, существует ли соглашение о том, что возвращается для больших отрицательных чисел, потому что Smalltalks, как правило, использует знаковое представление для LargeInts, а дополнение 2 для SmallInts. Так что вам, возможно, придется это проверить.
Предостережение: для меня digitAt: немного плохое имя - я склонен ассоциировать его с «decimal-digit-at», что вводит в заблуждение.