1

在 Smalltalk(或至少 Squeak 和 Pharo)中,是否有一种可移植的方式来获取构成整数的字节,从最高有效字节开始,然后是下一个最高字节,依此类推,而不管跨字节顺序的差异如何平台?

4

5 回答 5

2

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

或者类似的东西。

对不起,我读的是位而不是字节。所以你必须将这些位捆绑成字节。假设您的意思是一个字节= 8位,这应该是“可行的”

于 2010-07-02T05:15:05.220 回答
0

罗伯特是对的: digitAt:idx 检索一个字节,从低字节的索引 1 开始(像往常一样)。digitLength 为您提供位数。

所以要列举使用:

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

我不确定是否有关于返回大负数的约定,因为 Smalltalks 倾向于对 LargeInts 使用符号值表示,而对 SmallInts 使用 2 的补码。所以你可能需要检查这个。

警告:对我来说,digitAt: 是个坏名字——我倾向于将它与“decimal-digit-at”联系起来,这是一种误导。

于 2010-08-23T13:41:26.780 回答
0

你知道这可能是很多字节吗?整数可以是任意大小,SmallIntegers 作为 31 位的直接对象(在 32 位图像中)

于 2010-07-05T15:48:58.670 回答
0

这取决于您的号码是如何表示的。如果你只是想得到数字的数字,你可以做类似的事情

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

分享和享受。

于 2010-09-18T01:01:10.507 回答
0

尝试 digitAt: 和 digitAt:put::

(333 digitAt: 1) hex '4D'
于 2010-08-12T20:44:03.423 回答