-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
질문있습니다!
21.05.05 02:13 작성 조회수 137
1
/* 4바이트 만큼의 버퍼 생성 */
const buffer = new ArrayBuffer(4);
/* 생성한 버퍼를 이용하여 DataView 생성 */
const view = new DataView(buffer);
/* setInt16 이면 2바이트 이므로 총 2개의 Element 생성 가능??? */
/* byteOffset 이 0부터 시작이면 2 일 때는 [0, 1, 2] 해서 3번째 Element 에 설정??? */
view.setInt16(2, 100, true);
console.log(view.getInt16(2, true));
console.log(view.getInt16(2));
위에서 setInt16 의 byteOffset에 2가 들어갔는데도 값이 설정되는 이유를 알고싶습니다.
setInt8에서는 setInt8 로 하여 byteOffset을 이리저리 설정해 보며 실행해봤지만 거기서 제가 든 의문은 여기서 생성한 ArrayBuffer는 분명 4바이트인데,
setInt16이면 하나의 엘리먼트에 2바이트가 할당이 되지 않나요?
엔디언...인디언... 이것 때문에 순서가 설정되는게 바뀌는건지 아직 감이 안잡히네요 ㅠㅠ
답변을 작성해보세요.
1
김영보
지식공유자2021.05.05
view.setInt16(2, 100, true);
위에서 setInt16 의 byteOffset에 2가 들어갔는데도 값이 설정되는 이유를 알고싶습니다.
==>
offset은 0번 인덱스부터 떨어지 위치(인덱스)입니다. 2번 인덱스부터 2바이트 단위(setInt16)로 100을 설정하므로 설정됩니다. 즉, 2번과 3번 인덱스의 2바이트를 사용하여 100을 설정합니다.
따라서 아래 코드도 값이 설정됩니다.
view.setInt16(1, 100, true);
하지만, 아래 코드는 3번 인덱스부터 시작하므로 2바이트 단위에 맞지 않아 에러가 납니다.
view.setInt16(3, 100, true);
twosom
질문자2021.05.05
앗! 그렇다면 byteOffset이 Int16Array의 엘리먼트 단위가 아닌 "바이트" 단위였던거군요!
어쩐지 Int8Array에서는 바이트단위로 쏙쏙 들어간다 싶었습니다!
답변 감사합니다! 궁금한 점이 시원하게 해결되었습니다!
답변 1