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