Smalltalk(または少なくともSqueakとPharo)には、整数を構成するバイトを取得するための移植可能な方法があります。これは、最上位バイトから始まり、次のバイトが続くというように、バイト順序の違いに関係なく続きます。プラットフォーム?
5 に答える
1 to: (31 highBitOfMagnitude) do: [:i | Transcript show: (31 bitAt: i)].
または、この線に沿った何か。
申し訳ありませんが、バイトではなくビットを読みました。したがって、ビットをバイトにバンドルする必要があります。あなたがバイト= 8ビットを意味すると仮定すると、これは「実行可能」であるはずです
それはあなたの番号がどのように表されるかに依存します。数字の桁を取得したいだけなら、次のようなことができます。
12345 printString do: [ :c | "Your code to manipulate the digits here" ]
共有してお楽しみください。
ロバートの言うとおりです。digitAt:idx は、下位バイトのインデックス 1 (通常どおり) から始まるバイトを取得します。digitLength は桁数を示します。
したがって、使用を列挙するには:
n digitLength downTo:1 do:[:idx | do something with (n digitAt:idx)]
SmalltalksはLargeIntsには符号値表現を使用する傾向がありますが、SmallIntsには2の補数を使用する傾向があるため、大きな負の数に対して何が返されるかについての規則があるかどうかはわかりません。したがって、これを確認する必要がある場合があります。
警告: 私にとって、digitAt: は少し悪い名前です。誤解を招く「decimal-digit-at」と関連付ける傾向があります。
バイト数が多い可能性があることを認識していますか? 整数は任意のサイズにすることができ、SmallIntegers は 31 ビットの直接オブジェクト (32 ビット イメージ内) です。
digitAt: と digitAt:put:: を試してください。
(333 digitAt: 1) hex '4D'