• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

질문있습니다!

21.05.05 02:13 작성 조회수 117

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

답변을 작성해보세요.

1

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님의 프로필

twosom

질문자

2021.05.05

앗! 그렇다면 byteOffset이 Int16Array의 엘리먼트 단위가 아닌 "바이트" 단위였던거군요!

어쩐지 Int8Array에서는 바이트단위로 쏙쏙 들어간다 싶었습니다! 

답변 감사합니다! 궁금한 점이 시원하게 해결되었습니다!

이해가 매우 빠르시네요. 개발자 DNA를 가진 듯 합니다. 응원합니다.^^