Как получить байты, которые составляют целое число? - PullRequest
1 голос
/ 02 июля 2010

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

Ответы [ 5 ]

2 голосов
/ 02 июля 2010

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

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

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

0 голосов
/ 18 сентября 2010

Это зависит от того, как представлен ваш номер.Если вы просто хотите получить цифры номера, вы можете сделать что-то вроде

12345 printString do: [ :c | "Your code to manipulate the digits here" ]

Поделиться и наслаждаться.

0 голосов
/ 23 августа 2010

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

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

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

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

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

0 голосов
/ 13 августа 2010

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

(333 digitAt: 1) hex '4D'
0 голосов
/ 05 июля 2010

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

...