2011-04-18 9 views
0

ActionScript와 javascript는 '>>>'연산자를 지원합니다. 파이썬을 사용하여 base64 인코딩/디코딩의 액션 스크립트를 변환 중입니다. 나는 base64가 가능하다는 것을 알고 있으며 이것은 학습 목적을위한 것이다. 파이썬에는 "..."연산자가 없습니다. 디코드 함수 base64 action script>>> 파이썬에서 연산자

는 16 & 0xFF의 두 라인

  1. O1 = 비트 >>>있다;
  2. o2 = 비트 >>> 8 & 0xff;

어떻게 이러한 선을 파이썬으로 변환합니까?

+2

연산자 *는 무엇을합니까? 산술 오른쪽 시프트? (''>''같은 것들은 Google에게는 어렵 기 때문에 * 이름을 붙이십시오.) –

+0

btw. Python에서 AES가 필요한 경우 PyCrypto 패키지 만 사용하십시오. http://pycrypto.org/ – vartec

+0

논리적 인 시프트 권한 (LSR)과 반대되는 산술 시프트 권리 (ASR)입니다. 나는 여전히 이들 언어 중 하나가 회전 명령 (ROL과 ROR)을 구현하기를 원하지만 정확한 비트 수에 따라 달라지며 일부 프로세서는 캐리 비트를 통해 회전 시키므로 지저분해진다. 오, BTW,'bits >>> 16 & 0xff'와'bits >> 16 & 0xff'는'&'연산자로 수행 된 마스킹 때문에'bits '가 최소한 24 비트 길이이면 똑같습니다. . 다른 방정식과 동일합니다. 영어로이 방정식은 더 큰 정수 필드에서 단일 바이트를 추출합니다. –

답변

0
import ctypes 
#convert signed to unsigned 
bits = ctypes.c_uint32(bits).value 

o1 = bits >> 16 & 0xff 
o2 = bits >> 8 & 0xff 
+0

연산자'>> '는 JavaScript에서''>>'와 다른 것을 수행하며,이 문맥에서 차이점은 중요합니다. –

3

IINM는 >>>는 가장 왼쪽의 비트 값을 유지 우측 시프트한다. 이것은 숫자의 부호를 그대로 유지하는 효과가 있습니다 (즉, 음수는 0 대신에 MSB로 삽입됩니다).

파이썬에서 정수는 임의로 커질 수 있습니다. 비트 수가 제한되지 않으므로 최상위 비트의 의미있는 개념이 없습니다. 따라서 오른쪽 쉬프트는 모든 비트를 오른쪽으로 이동시키고 부호를 보존합니다. 따라서 파이썬에서는 >>을 사용할 수 있습니다.

편집 : @Sven Marnach으로

>>> 작업은 내가 자바 스크립트에서했던 생각했던의 정확한 반대하지 지적했다. 따라서 >>>은 부호를 유지하지 않지만 >>은 부호를 유지합니다. 또 다른 흥미로운 사실은 -1>>1-1이고 Javascript가 0이 아닌 것 같습니다. 말할 필요도없이 Javascript에 대한 지식이 실제로 제한되어 있으므로 Python에서 이러한 연산자와 정확히 동일한 것이 무엇인지 확신 할 수 없습니다.

아마도 하나의 옵션은 (아마도 ctypes.c_int을 사용하여) 사용되는 비트 수를 명시 적으로 제한 한 다음 사용자 정의 오른쪽 시프트 기능에서 원하는대로 왼쪽 비트를 수동으로 설정할 수 있습니다.

+0

사실이 아닙니다. '>>>'는 * 기호를 보존하지 않습니다 :'javascript : alert (-3 >>> 1); ' –

+0

@Sven Marnach : 고마워요. 답변을 업데이트했습니다. – MAK

관련 문제