2013-06-14 8 views
2

Pharo Smalltalk 2.0을 사용하고 있습니다. float를 ByteArray로 변환해야합니다. 이것을 할 수있는 방법이없는 것처럼 보입니다. 그 일을하는 데 왕성한 방법이 있습니까?Pharo Smalltalk의 float를 bytearray로 변환 하시겠습니까?

예를 들어, 1 asFloat asByteArray은 완벽 할 것입니다.

컨텍스트 : 아연 웹 소켓 패키지를 사용하여 websocket을 통해 바이너리 데이터를 보내려고합니다.

답변

2

당신의 i386 CPU에있는 경우, 그 바이트 순서가이 경우에 littleEndian의입니다 기본 부스트

(ByteArray new: 8) nbFloat64AtOffset: 0 put: Float pi; yourself 

참고로 할 수 있습니다. 0 기반의 첫 번째 경우에 대한 인덱스 및과의 차이 두 번째 경우에 (1) 기반

(ByteArray new: 8) doubleAt: 1 put: Float pi bigEndian: true ; yourself 

참고 :

그렇지 않으면, 당신은 그 플랫폼 독립적 액세스 할 수 있습니다.

3

Float 이미 변수 클래스이며, 즉 배열과 유사한 조금 :

3.14. "=> 3.14" 
3.14 size. "=> 2" 
3.14 at: 1. "=> 1074339512" 
3.14 at: 2. "=> 1374389535" 

당신은 또한 그것을 수정할 수 있습니다 염두에두고

| f | 

f := 3.14. 
f at: 1 put: 10000. 
f. "=> 2.1220636948306e-310" 

, 당신은 지금 처리 할 수 ​​있습니다 그 두 정수.

그러나, Pharo 2.0은 일반적으로 을 사전 설치 연료와 함께 제공하고 이미 부동 직렬화하는 수단을 포함 : 당신이 Pharo 또는 경우

ByteArray streamContents: [ :s | 
    FLEncoder on: s globalEnvironment: Dictionary new do: [ :e | 
    3.14 serializeOn: e ]] "=> #[64 9 30 184 81 235 133 31]" 

은 아마, 당신은 모두 직렬화 연료를 사용하려면를 양쪽 끝을 톡톡 치십시오.

관련 문제