2010-07-02 2 views
1

Smalltalk (또는 최소한 Squeak 및 Pharo)에는 정수를 구성하는 바이트를 가져올 수있는 이식성있는 방법이 있는데, 바이트 순서에 관계없이 가장 중요한 바이트부터 시작하여 다음 바이트 순서대로 순서대로 배열하는 것입니다. 플랫폼 간 차이점은 무엇입니까?메이크업 바이트를 정수로 가져 오는 방법은 무엇입니까?

+0

정수를 요구하기 때문에 플랫폼 차이가 없기 때문에 MSB와 LSB는 항상 동일합니다 – mathk

답변

2

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

또는이 라인을 따라 뭔가.

죄송합니다. 바이트가 아닌 비트를 읽었습니다. 따라서 비트를 바이트로 묶어야합니다. 바이트 = 8 비트라고 가정하면이 값은 "실행 가능"이어야합니다.

0

바이트 수가 많을 수 있습니다. 및 digitAt는 : 넣어 ::

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

digitAt을 시도하여, 임의의 크기 일 수있다 : idx 은 하위 바이트에 대해 (보통 때와 마찬가지로) 1의 인덱스로 시작하는 바이트를 검색합니다. digitLength 자릿수를 제공합니다.

그래서 열거 사용 :

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

큰 음수에 대해 반환되는 사항에 대한 관례가있는 경우 Smalltalks은 사인 값 LargeInts에 대한 표현하지만, 2의 보수를 사용하는 경향이 있기 때문에 나는, 확실하지 않다 SmallInts. 그래서 이것을 확인해야 할 수도 있습니다.

경고 : 저에게 digitAt : 나쁜 이름입니다. 나는 이것을 "십진수 자리"와 연관시키는 경향이 있습니다. 오해의 소지가 있습니다.

0

로버트 오른쪽이다 digitAt 정수 (32 비트 이미지)에서 31 비트의 직접적인 개체로 SmallIntegers

0

숫자가 표시되는 방식에 따라 다릅니다. 숫자의 숫자를 가져오고 싶다면

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

공유하고 즐기십시오.