본문 바로가기
Programming/C

byte order 에서 char 배열은 문제가 없는가?

by jjayheony 2025. 4. 17.
반응형

byte order는 바이트를 처리하는 순서이다.

그 처리 순서는 두가지가 있고 Little Endian 과 Big Endian 이 있다.

본인은 CS 지식이 부족하여 궁금하였는데

char 형 배열은 엔디안 처리가 필요 없다고 하여 Chat GPT 에게 물어보았다.

 

질문은 "서로 다른 엔디안을 사용하고 있는 시스템 간에 char 형 배열을 보낸다고 하면 엔디안 처리가 필요해?" 였다.

서로 다른 엔디안(예: 리틀 엔디안 시스템과 빅 엔디안 시스템)을 사용하는 시스템 간에 char 형 배열을 전송할 경우, 일반적인 경우 char(1바이트) 데이터는 엔디안의 영향을 받지 않기 때문에 추가적인 변환이 필요하지 않습니다.

이유

  1. char 데이터는 1바이트입니다:
    • char 배열에 저장된 데이터는 단일 바이트 단위의 데이터이므로 바이트 순서의 개념이 적용되지 않습니다. 따라서, 단일 바이트 형식의 데이터를 전달할 때는 엔디안 변환이 필요하지 않습니다.
  2. 데이터 정합성과 일관성:
    • char 배열 내에 포함된 데이터(문자열이나 이진 데이터 등)는 그 자체로 의미가 있으며, 각 바이트가 리틀 엔디안과 빅 엔디안의 영향을 받지 않기 때문에 데이터 전송 시 문제를 일으키지 않습니다.

엔디안 변환이 필요한 경우

하지만, 만약 char 배열이 여러 바이트로 구성된 멀티바이트 데이터 (예: int, long long, float 등)를 포함하고 있다면, 그런 경우는 주의가 필요합니다:
  1. 다른 엔디안을 사용하는 시스템 간 데이터 전송:
    • 만약 char 배열에 여러 바이트로 된 숫자형 데이터 또는 부동 소수점 데이터가 포함되어 있다면, 이를 전송하기 전에 해당 데이터의 바이트 순서를 맞춰줄 필요가 있습니다.
    • 예를 들어, int 배열이나 long long 배열을 char 배열에 패킹하여 전송하고, 수신 측이 다른 엔디안을 사용하는 경우에는 전달된 데이터를 수신 측의 엔디안 형태로 변환해야 합니다.

 

어쨌든 필요 없다는 의미였지만 정확하게 이해가 되지 않았다. 

결국 구글을 뒤져보니 좋은 글이 있었다.

https://blog.naver.com/jst000007/150083170423

 

결국 CPU 가 처리하는 하드웨어차원 문제로 엔디안 방식이 다르다.

char 형 배열의 경우 char 가 결국 1byte 이고 이 1byte가 메모리에 그대로 들어간다.

그러나 멀티바이트 즉, 2byte, 4byte, 8byte 의 경우에는 시작이 어디인가 문제이다.

그래서 배열의 문제가 아니다.

1 byte 인 자료형들은 처리해줄 필요가 없고

멀티바이트 일 경우에만 처리가 필요하다.

반응형