Smalltalk 如何获取组成整数的字节?

Smalltalk 如何获取组成整数的字节?,smalltalk,squeak,pharo,Smalltalk,Squeak,Pharo,在Smalltalk(或者至少是Squeak和Pharo)中,有没有一种便携的方式来获取组成整数的字节,从最高有效字节开始,然后是下一个最高有效字节,依此类推,而不考虑不同平台之间的字节顺序差异?1到:(31高位)do:[:i |转录本显示:(31位:i)]。 或者类似的东西 对不起,我读的是位,不是字节。因此,您必须将位绑定到字节中。 假设你的意思是一个字节=8位,这应该是“可行的”你知道可能有很多字节吗?整数可以是任意大小,小整数作为31位的直接对象(在32位图像中)试试digitAt:和d

在Smalltalk(或者至少是Squeak和Pharo)中,有没有一种便携的方式来获取组成整数的字节,从最高有效字节开始,然后是下一个最高有效字节,依此类推,而不考虑不同平台之间的字节顺序差异?

1到:(31高位)do:[:i |转录本显示:(31位:i)]。

或者类似的东西

对不起,我读的是位,不是字节。因此,您必须将位绑定到字节中。
假设你的意思是一个字节=8位,这应该是“可行的”

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

试试digitAt:和digitAt:put::

(333 digitAt: 1) hex '4D'
罗伯特是对的: 数字:idx 检索一个字节,从低字节的索引1(通常)开始。 数字长度 给你数字的数目

因此,要列举使用:

n digitLength downTo:1 do:[:idx | do something with (n digitAt:idx)]
我不确定,对于大负数返回的内容是否有约定,因为Smalltalks倾向于对大整数使用符号值表示,而对小整数使用2的补码。所以你可能需要检查一下


警告:对我来说,digitAt:有点不好——我倾向于将它与“十进制数字at”联系起来,这是误导性的。

这取决于你的数字是如何表示的。如果你只想得到数字的位数,你可以这样做

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

共享和享受。

因为您要求的是整数,所以没有平台差异,MSB和LSB总是相同的