2016-08-24 4 views
0

비트를 TCL의 바이트로 변환하고 싶습니다. 파일에서 datas를 가져 오는 변수가 있습니다. 다음 그래서, 내가 가지고 비트 문자열로 변환 :비트를 바이트로 변환하는 방법 TCL

0100000101011010011000011000101001111000001101101000001001000101011010010001101100110110001110000011100000111001001110010110100101001111 

다음 i가 각각 8 비트로 분할 할 내가 잘 모릅니다. $dataBits. 변수가 나는 목록 작성에

나는이 비트를 넣어 :

set lista [list $dataBits] 

죄송합니다,하지만 난 멍청한 놈과 내가 TCL을 배웁니다.

인사말, 마이클

당신은 expr 또는 scan 명령을 통해 진수 값으로 진수 문자열로 변환 할 수 있습니다
+0

1 바이트는 8 비트입니다. 당신의 입력을 각각 8 비트로 분할하고 싶습니까? – Dinesh

+0

예, 정확히 :) – Mdr92

+0

답변이 하나만있는 경우 허용 된 것으로 표시하십시오 (체크 표시를 클릭하십시오). 또한 문제가 해결 된 것으로 표시됩니다. – Jerry

답변

0

:

set val "01110010" 
puts [expr { "0b$val" }]; # print "114" 
puts [scan $val %b]; # print "114" 

가 사용할 수있는 숯불/바이트 진수 문자열을 변환하려면 binary format 명령을

set val "0111001001110010" 
puts [binary format B* $val]; # print "rr" 
+0

하지만 각 8 비트로 분할해야합니다 – Mdr92

+0

비트를 바이트/문자로 변환하려면 문자열을 8 진수로 분할 할 필요가 없습니다. '바이너리 형식 B *'는 매 8 비트마다 바이트로 변환됩니다. – Chpock

0
set bits 0100000101011010011000011000101001111000001101101000001001000101011010010001101100110110001110000011100000111001001110010110100101001111 
set bytes {} 
for {set i 0} {$i < [string length $bits]} {incr i 8} { 
    lappend bytes [string range $bits $i $i+7] 
} 

이 솔루션은 단순히 비트 문자열의 8 번째 문자 위치를 방문하고 해당 위치의 8자를 bytes의 목록에 추가 된 문자열로 복사합니다.

문서 : < (operator), for, incr, lappend, set, string

구문 티클 지수 식 :

  • 정수 제로 인덱스 뉴 mber
  • end 마지막 요소 실제로
  • end-N 마지막 요소
  • end+ N 마지막 요소 이후 N 번째 요소 전의 N 번째 요소 (N은 음수 여야 함)
  • MNn th 요소 요소 m
  • M + N 전에 는 N 번째 요소 소자 미터

후 발현 내에 공백이있을 수 없다.

+0

고마워요! :) 그것은 작동 중입니다! – Mdr92

0

파티셔닝의 경우 regexp을 사용할 수도 있습니다.

set bits {0100000101011010011000011000101001111000001101101000001001000101011010010001101100110110001110000011100000111001001110010110100101001111} 
% regexp -inline -all {[01]{1,8}} $bits 
01000001 01011010 01100001 10001010 01111000 00110110 10000010 01000101 01101001 00011011 00110110 00111000 00111000 00111001 00111001 01101001 01001111 
% # Even if they are even not in the form of multiples of 8, it will work as well 
% set bits 1010101001 
1010101001 
% regexp -inline -all {[01]{1,8}} $bits 
10101010 01 
% 
+0

감사합니다! 나는 그것을 시도 할 것이다 : – Mdr92

+0

같은 효과에 대해서'regexp -inline -all {. (1,8}} $ bits')을 사용할 수있다. 입력 값이 0과 1 뿐이라는 것을 안다면 다시 검증 할 필요가 없습니다. – Jerry

관련 문제