如何获得构成整数的字节?

时间:2010-07-02 01:05:04

标签: smalltalk squeak pharo

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

5 个答案:

答案 0 :(得分:2)

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

或者类似的东西。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

尝试使用digitAt:和digitAt:put ::

(333 digitAt: 1) hex '4D'

答案 3 :(得分:0)

罗伯特是对的:     digitAt:IDX 检索一个字节,从低字节的索引1(通常)开始。     digitLength 给你数字位数。

所以要枚举使用:

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

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

警告:对我来说,digitAt:有点坏名字 - 我倾向于把它与“十进制数字”相关联,这是误导性的。

答案 4 :(得分:0)

这取决于您的号码的表示方式。如果您只想获得数字的数字,您可以执行类似

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

分享并享受。