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