이 코드를 이해하는 데 도움이 필요합니다. 바이트 배열 중간에 값을 삽입하는 것을 볼 수는 있지만, Javascript에서 이것을 재 구현할 필요가 있습니다. 완전히 이해하고 싶습니다.파이썬에서 비트 조작 함수 이해하기
Array = [0] * 256
Bit_Offset = 0
[...]
def AddBits(byte_offset, bit_offset, bits, value):
global Bit_Offset
global Array
for i in range(bits):
if(value & 0x01):
Array[(byte_offset + ((bit_offset + Bit_Offset + i)/ 8))] |= (0x01 << ((bit_offset + Bit_Offset + i) % 8));
value /=2
Bit_Offset += bits
그리고 그것은 다음과 같이 사용되는 :
AddBits(3, 0, 8, 0xaa)
AddBits(3, 0, 3, 0xbb)
편집 : 좋아, 그것은 바이트의 사용자 지정 오프셋 (offset)에 삽입 값을 수행하지만, 모든에 (나에게 매우 가난한 알고리즘과 같은주기를 찾습니다 삽입 할 비트, 정말로?). 그것을 할 수있는 더 좋은 방법이 있어야합니다!
저는 바이너리 수학에별로 좋지 않지만, 8 - bit_offset
과 같은 값을 이동시키는 아이디어가 떠 올랐습니다 (첫 번째 비트가 올바른 바이트 오프셋에 있도록). 그런 다음 부분으로 분할합니다. 그것이 여러 바이트에 걸쳐 있고 마지막으로 배열의 바이트와 OR되는 경우. 이 올바른지? 어떻게 분할 부분을 구현할 수 있습니까?
처럼 한 번에 한 바이트를 할 수있는 ... 내가 느끼는
한 개선에 for 루프를 변경하는 것 이런 이유로 누군가가 docstrings을 만드는 아이디어를 생각해 냈습니다 ... – mgilson
당신의 이해가 정확합니다 - 임의의 비트 길이 값을 임의의 바이트와 비트 오프셋의 바이트 배열에 삽입하고 있습니다 ... . –
@mgilson LMAO, 나는 확실히 동의합니다! 불행하게도이 코드는 우리가 통제 할 수 없기 때문에 문서의 부족에 대해서는 아무 것도 할 수 없으며 단지 최선을 이해하려고 노력합니다. – EliaCereda