DataView 객체의 setUint32() 함수는 ArrayBuffer 내 지정된 바이트 오프셋 위치에 부호 없는 32비트 정수(unsigned 32-bit integer)를 저장합니다. 이진 데이터를 직접 다루어야 하는 파일 처리, 네트워크 프로토콜 구현 등에서 유용하게 활용됩니다.
문법(Syntax)
dataView.setUint32(byteOffset, value, littleEndian);
매개변수 설명
- byteOffset: 값을 저장할 시작 위치입니다. 버퍼의 시작점부터의 바이트 오프셋을 의미합니다.
- value: 저장할 숫자 값입니다. 부호 없는 32비트 정수 범위(0 ~ 4,294,967,295)로 변환되어 저장됩니다.
- littleEndian (선택 사항): true이면 리틀 엔디안(little-endian) 방식으로, false 또는 생략하면 빅 엔디안(big-endian) 방식으로 저장합니다.
예제 1: 기본 사용법
다음 예제는 20바이트 크기의 ArrayBuffer를 생성하고, 오프셋 1번 위치에 값 45544를 저장한 뒤 다시 읽어 출력합니다.
<html>
<head>
<title>JavaScript Example</title>
</head>
<body>
<script type="text/javascript">
var arrayBuffer = new ArrayBuffer(20);
var dataView = new DataView(arrayBuffer);
dataView.setUint32(1, 45544);
document.write(dataView.getUint32(1));
</script>
</body>
</html>
실행 결과
45544
예제 2: 실수(float) 값 전달 시 동작
setUint32() 함수에 소수점이 있는 실수 값을 전달하면, 해당 값은 정수로 잘려나간(truncate) 후 저장됩니다. 예를 들어 455.44를 전달하면 소수점 이하가 버려져 455만 저장됩니다.
<html>
<head>
<title>JavaScript Example</title>
</head>
<body>
<script type="text/javascript">
var arrayBuffer = new ArrayBuffer(20);
var dataView = new DataView(arrayBuffer);
dataView.setUint32(1, 455.44);
document.write(dataView.getUint32(1));
</script>
</body>
</html>
실행 결과
455
예제 3: 값 없이 호출한 경우
저장할 값을 지정하지 않고 setUint32()를 호출하면 해당 위치에는 0이 저장됩니다. 따라서 이후 getUint32()로 데이터를 읽으면 0이 반환됩니다.
<html>
<head>
<title>JavaScript Example</title>
</head>
<body>
<script type="text/javascript">
var arrayBuffer = new ArrayBuffer(20);
var dataView = new DataView(arrayBuffer);
dataView.setUint32(1);
document.write(dataView.getUint32(1));
</script>
</body>
</html>
실행 결과
0
정리
setUint32()는 DataView를 통해 이진 데이터에 부호 없는 32비트 정수를 기록하는 핵심 메서드입니다. 실수 값은 자동으로 정수로 변환되며, 값을 생략하면 0이 저장된다는 점을 기억해 두면 디버깅에 도움이 됩니다.