16진수 → 2진수 배열로 변환 (각 비트 비교)

Category
모듈 분석
Status
Published
Tags
Kiosk
Module
Bit Mask
Description
Published
Slug
10진수를, 8자리 2진수 문자열로 변경하는 방법
const binaryStatus = status.toString(2).padStart(8, '0');
status라는 변수의 값을 이진(binary) 형식으로 변환하고, 그 결과를 8자리로 맞추는 역할

1. status.toString(2)

  • status: 이 변수는 숫자 값
  • toString(2): 이 메서드는 status를 이진 문자열로 변환. 여기서 2는 진법을 나타내며, 이진법(0과 1)으로 변환하라는 의미
    • 예: 만약 status가 5라면, toString(2)는 '101'이라는 문자열을 반환
    •  

2. padStart(8, '0')

  • padStart(8, '0'): 이 메서드는 문자열의 길이를 8로 맞추기 위해 사용.
  • 만약 문자열의 길이가 8보다 짧다면, 문자열의 앞쪽에 '0'을 추가하여 길이를 8로 만듦
  • 예: '101'이라는 문자열에 대해 padStart(8, '0')를 사용하면 '00000101'로 변환됨
  • 만약 status가 255라면, 이진 변환 후 '11111111'이 되고, padStart(8, '0')는 변환된 문자열의 길이가 8이므로 변화가 없음
 
 
  • status = 5인 경우:
    • const binaryStatus = (5).toString(2).padStart(8, '0'); // '00000101'
  • status = 255인 경우:
    • const binaryStatus = (255).toString(2).padStart(8, '0'); // '11111111'
 

 
허나, 해당 8비트 문자열로 바꾸지 않더라도
아래와 같은 방식으로 비트를 비교할 수 있다.
 
status 값이 10진수로 표현된 정수일 때, 비트 연산(&)은 자동으로 정수의 이진 표현에 대해 수행
 
// 각 비트의 상태 확인 const paperOut = (status & 0b00000001) !== 0;// 0번 비트 const offline = (status & 0b00000010) !== 0;// 1번 비트 const error = (status & 0b00000100) !== 0;// 2번 비트 const otherStatus = (status & 0b00001000) !== 0;// 3번 비트
 
비트 연산을 사용하여 status 변수의 각 비트를 확인하고, 프린터의 상태를 나타내는 여러 가지 조건을 평가.
 

비트 연산 설명

  • 비트 연산자 &: 이 연산자는 두 개의 비트가 모두 1일 때만 1을 반환함
    • 따라서 특정 비트를 확인하기 위해 마스크(mask)를 사용하여 해당 비트가 1인지 0인지를 판단할 수 있음
       
      마스크란?
      status00000101 (10진수 5)이고, 0번 비트를 확인하고 싶다고 가정하면
      이 경우 사용할 마스크는 00000001
       
      마스크: 00000001 (0번 비트만 1이고 나머지는 0)
       

각 비트

  1. outOfPaper:
    1. const outOfPaper = (status & 0b00000001) !== 0; // 0번 비트
      • 0번 비트가 1이면 용지가 없음을 나타냄
  1. printerHeadUp:
    1. const printerHeadUp = (status & 0b00000010) !== 0; // 1번 비트
      • 1번 비트가 1이면 프린터 헤드가 올라가 있음을 나타냄
  1. paperJam:
    1. const paperJam = (status & 0b00000100) !== 0; // 2번 비트
      • 2번 비트가 1이면 용지가 잼이 있음을 나타냄
  1. paperNearEnd:
    1. const paperNearEnd = (status & 0b00001000) !== 0; // 3번 비트
      • 3번 비트가 1이면 용지가 거의 다 떨어져 있음을 나타냄
  1. printingOrFeeding:
    1. const printingOrFeeding = (status & 0b00010000) !== 0; // 4번 비트
      • 4번 비트가 1이면 프린팅 중이거나 용지를 공급 중임을 나타냄
  1. cutterError:
    1. const cutterError = (status & 0b00100000) !== 0; // 5번 비트
      • 5번 비트가 1이면 컷터에 에러가 있음을 나타냅니다.
  1. unused:
    1. const unused = (status & 0b01000000) !== 0; // 6번 비트
      • 6번 비트는 사용되지 않음을 나타내며, 항상 0이어야 함
  1. paperInAuxSensor:
    1. const paperInAuxSensor = (status & 0b10000000) !== 0; // 7번 비트
      • 7번 비트가 1이면 보조 센서에 용지가 있음을 나타냄