2013-10-21 1 views
1

누구든지 이진 형식 명령을 사용하여 정수 값을 계산할 수 있습니까? 하지만 오류가 발생하고 구문에 'l'을 표시 할 수 없습니다 (형식 명령 format %lx 146366987889541120처럼).바이너리 형식 명령으로 TCL에서 긴 정수를 처리하는 방법은 무엇입니까?

% format %lx 146366987889541120 
208000000000000 
% 
% 
% format %x 146366987889541120 
0 
% 

누구든지 나를 해결할 방법을 제안 할 수 있습니까?

답변

1

편집 :이 수를 나타내는 이진 문자열을 원하는 경우에 그냥

format %llb 146366987889541120 

를 사용합니다. 당신이 넓은 정수 처리하지 않는 경우


(보다 큰 64 비트,은 Tcl 8.5에 추가), 당신은

binary scan [ binary format w 146366987889541120] B* g 

를 사용할 수 있지만 당신은 최고의 workarround 이상 정수가있는 경우 그 I 발견은 다음과 같습니다

# convert a binary string to a large integer 
binary scan $bytes H* temp 
set num [format %lli 0x$temp] 
# convert a number to a binary string. 
set bytes [binary format H* [format %llx $num]] 

당신이 0 binary format 위해를 추가 할 수 있도록이, (앞에 0이) 몇 가지 버그가 있습니다.

set hex [format %llx $num] 
if {[string length $hex]%2} {set hex 0$hex} 
set bytes [binary format H* $hex] 

그러나이 접근 방식이 최상의 성능을내는 것은 의심 스럽습니다.

관련 문제