사용은 DataView
:
function ArrayBufferToBit(buffer) {
var dataView = new DataView(buffer);
var response = "", offset = (8/8);
// I assume we will read the entire file as a series of 8-bit integers,
// i.e. as a byte, hence my choice of offset.
for(var i = 0; i < dataView.byteLength; i += offset) {
response += dataView.getInt8(i).toString(2);
// toString is the secret sauce here.
}
return response;
}
Dataview
의는 읽기/숫자 데이터를 쓸 수; getInt8
은 데이터를 바이트 위치 (여기서는 0)에서 ArrayBuffer
의 부호있는 8 비트 정수 표현으로 변환하고 toString(2)
은 8 비트 정수를 2 진 표현 형식 (즉 1과 0의 문자열)으로 변환합니다.
'magic'오프셋 값은 바이트로 저장된 파일을 8 비트 정수로 가져 와서 8 비트 정수 표현으로 읽음으로써 얻어집니다. 바이트 저장 (즉, 8 비트) 파일을 32 비트 정수로 읽으려는 경우 32/8 = 4가 바이트 공간 수 (바이트 오프셋 값)입니다. ArrayBuffer 객체 일반 고정 길이 원시 이진 데이터 버퍼를 나타내는 데 사용된다
:
이
는 어레이를 입력하기 또한,
ArrayBuffer
에서 읽기/쓰기 할
recommended way이다. ArrayBuffer의 내용을 직접 조작 할 수는 없습니다. 대신 형식화 된 배열 객체 중 하나를 만들거나 버퍼를 특정 형식으로 나타내는 DataView 객체를 만들고이를 사용하여 버퍼의 내용을 읽고 씁니다.
서명 8 비트 표현 이외에, 당신은 또한 표현의 다양성을 얻을 수 있습니다 (같은 float64
또는 int32
). 표현의 선택은 중요하지 않습니다. 왜냐하면 toString(2)
은 바이너리 형식으로 표시하기 때문입니다 (비록 바이너리 문자열의 길이가 확실한 이유로 변경 될지라도!).
이 예에서는 전체 파일을 일련의 8 비트 정수로 표시하도록 선택 했으므로 즉 바이트 단위로 읽는 것으로 나타났습니다. 그러나 일반적으로 DataView
은 균질 유형의 혼합을 용이하게합니다. 처음 12 바이트는 32 비트 정수로, 나머지는 64 비트로 읽을 수 있습니다. DataView
은 일반적으로 파일을 처리 할 때 다른 파일 형식을이 방법으로 처리 할 수 있고 DataView
은 다른 아키텍처의 파일의 엔디안을 처리하기 때문에 선호됩니다.
@ le_m의 답변 또는 DataView
과 같이 유형이 지정된 배열로 처리 할 수 있지만 DataView
은 endianness (파일이 다른 CPU의 네트워크를 통해 전송되는 경우)와 다른 파일 형식 (예 :주 내용 앞에 몇 바이트 헤더가있는 PDF 파일).
감사합니다. 그래도 당신의 예제에는 여전히 잘못된 것이 있다고 생각합니다. 'dataView.getInt32 (0) .toString (2)'는 결과적으로 이미지에 대해'1000111010010010100011000111000'을 표시합니다. 조금 짧아 보입니다 ... – Jules
@Jules 나는 내 대답을 수정하고 더 나은 것으로 업데이트했습니다. –
@AkshatMahajan 저는 OP와 같은 문제에 최근에 돌입했습니다. 나는 대답과 설명을 따릅니다. 그것은 나처럼 초보자를 위해 훌륭하고 상세합니다. 그런 다음 화면에 바이너리/16 진수 데이터 인쇄를위한 전체 데모를 작성합니다. 그러나 나는이 바이너리 핸들 영역에 새로운 것이었다. 나는 결과를 얻을 수있다. ** 그러나 내가 이해하고 있는지/올바르게하고 있는지 확신 할 수 없다. 내가 향상시킬 수있는 것이 무엇이든지간에 그것을 체크 아웃 할 수 있을까? [여기 피들] (https://jsfiddle.net/69c5wcmL/1/) ** – Lien