Как получить байты тот состав целое число?

В Smalltalk (или по крайней мере Squeak и Pharo), там портативный способ получить байты, которые составляют целое число, начиная со старшего значащего байта, сопровождаемого следующим больше всего, и так далее, независимо от различий порядка байтов через платформы?

1
задан Reynald 2 July 2010 в 01:05
поделиться

4 ответа

1 -: (31 highBitOfMagnitude) do: [:i | Transcript show: (31 bitAt: i)].

Или что-то в этом роде.

Извините, я прочитал биты, а не байты. Значит, вам нужно объединить биты в байты. Предполагая, что вы имеете в виду байт = 8 бит, это должно быть "выполнимо"

.
2
ответ дан 2 September 2019 в 23:22
поделиться

Вы знаете, что байтов может быть много? Целые числа могут иметь произвольный размер, при этом SmallInteger является прямым 31-битным объектом (в 32-битном изображении)

0
ответ дан 2 September 2019 в 23:22
поделиться

Попробуйте digitAt: и digitAt:put::

(333 digitAt: 1) hex '4D'
0
ответ дан 2 September 2019 в 23:22
поделиться

Роберт прав: digitAt: idx извлекает байт, начиная с индекса 1 (как обычно) для младшего байта. digitLength дает вам количество цифр.

Итак, чтобы перечислить использование:

n digitLength downTo:1 do:[:idx | do something with (n digitAt:idx)]

Я не уверен, существует ли соглашение о том, что возвращается для больших отрицательных чисел, потому что Smalltalks, как правило, использует знаковое представление для LargeInts, а дополнение 2 для SmallInts. Так что вам, возможно, придется это проверить.

Предостережение: для меня digitAt: немного плохое имя - я склонен ассоциировать его с «decimal-digit-at», что вводит в заблуждение.

0
ответ дан 2 September 2019 в 23:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: