반응형
최근 바이트로 저장된 값을 10진수로 변환하여 DB에 저장하는 로직을 구현해야했다.
단순히 부호가 없는 경우 parseInt
내장함수를 사용해 10진수로 변환할 수 있다.
const buf = 'a1d2';
const num = parseInt(buf, 16);
console.log(num); // 41426
부호가 있는 경우 맨 앞 자리의 숫자에 따라 음수, 양수로 나눠지며 계산하는 방법도 달라진다.
부호가 있는 16진수의 경우 앞자리가 07은 양수, 8F는 음수다.
(2진수로 변환시 맨 앞 비트가 0이면 양수, 1이면 음수)
2진수로 변환 후 맨 앞 비트에 따라 부호를 판단하고,
1의 보수를 구해 10진수로 변환하고 음수 변환을 한다.
function getDecimal(buf) {
// padStart를 사용하면 자릿수 만큼 해당 문자로 채울 수 있다.
const binary = parseInt(buf, 16).toString(2).padStart(16, '0');
const isNegative = binary.charAt(0) === '1'
// 음수일 경우에 사용될 2진수 1의 보수
const invertBin = binary.split('').map(char => char === '1' ? '0' : '1').join('');
// 음수일 경우 1의 보수를 10진수로 변환 후 음의 부호, 아닐 경우 2진수를 10진수로 변환
const decimal = isNegative ? -parseInt(invertBin, 2) : parseInt(bin, 2);
return decimal;
}
getDecimal('a1d2') // -24109
getDecimal('1323') // 4899
'Javasciprt' 카테고리의 다른 글
[Javascript] Auto Scroll을 중단 (0) | 2025.02.04 |
---|---|
[Next.js] Large Page Data (0) | 2023.09.21 |
[React MUI] TablePagination 사용 시, body에 right padding (0) | 2023.07.12 |
[Node.js] Ubuntu 18.04에 Node.js 14버전 설치하기 (0) | 2021.09.10 |
[ajax] Ajax를 통한 비동기 통신 (0) | 2021.08.26 |