2010-07-02 4 views
1

Dans Smalltalk (ou au moins Squeak et Pharo), existe-t-il un moyen portable d'obtenir les octets qui forment un entier, en commençant par l'octet le plus significatif suivi du suivant, et ainsi de suite, indépendamment de l'ordre des octets différences entre les plates-formes?Comment obtenir les octets qui composent un nombre entier?

+0

Puisque vous demandez un entier il n'y a pas de différence de plate-forme, MSB et LSB est toujours le même – mathk

Répondre

2

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

Ou quelque chose dans ce sens. Désolé, j'ai lu des bits et non des octets. Vous devez donc regrouper les bits en octets. En supposant que vous voulez dire un octet = 8 bit cela devrait être "faisable"

0

Vous savez que cela peut être beaucoup d'octets? Entiers peuvent être de taille arbitraire, avec SmallIntegers comme des objets directs de 31 bits (dans une image 32 bits)

0

Essayez digitAt: et digitAt: mis ::

(333 digitAt: 1) hex '4D' 
0

Robert a raison: digitAt: idx récupère un octet, en commençant par un index de 1 (comme d'habitude) pour l'octet faible. digitLength vous donne le nombre de chiffres.

donc d'énumérer l'utilisation:

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

Je ne sais pas, s'il y a une convention sur ce qui est retourné pour un grand nombre négatif, car Smalltalks ont tendance à utiliser la représentation de la valeur de signe pour LargeInts mais le complément de 2 pour SmallInts. Donc vous devrez peut-être vérifier cela. Mise en garde: pour moi, digitAt: est un peu un mauvais nom - j'ai tendance à l'associer à "decimal-digit-at", ce qui est trompeur.

0

Cela dépend de la façon dont votre numéro est représenté. Si vous voulez juste obtenir les chiffres du nombre que vous pourriez faire quelque chose comme

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

Partagez et appréciez.

Questions connexes