[C++] char data[20] = "\t\01"; 의 앞2바이트를 (sho

gyxor의 이미지

#include<iostream>
using namespace std;

int main(){
    
    char data[20] = "\t\01";
	char temp1[20] ={ 0};
	char temp2[20] ={ 0};
    short len=0;
	
	memcpy(&len ,&data[0] , sizeof(len) ) ;
		
	cout << len;

	return 0;
}

위 내용에서 결과는 tab의 아스키 코드값에 해당하는 9가 출력이 되어야 할거 같은데요.. 256이 출력됩니다.
대신 아래처럼
char data[20] = "\t\0a";
데이터에서 텝과 널 다음에 숫자가 아닌 문자가 올때만 정상적으로 읽히게 됩니다. 이때에는 의도대로 9가 찍힙니다.
이런현상이 왜 일어 나는지 궁금합니다
또 이것을 숫자일때에도 가능하게 하는 방법은 없는지 알려주시면 감사하겠습니다.
답변부탁드립니다.
dolsemix의 이미지

256이 아니라 265가 출력되겠죠 ^^;
인텔계열이라면 little endian이니까... 9+256=265

참고로... C 문법에서 Escape Character 표현방법에는 백슬래쉬 다음에 특수문자에 해당하는 문자 t, r, n 등을 써주는 방법과 숫자를 직접 써주는 방법이 있습니다.
숫자를 직접 쓸 경우 0으로 시작하는 숫자는 8진수, 1~9로 시작하는 숫자는 10진수입니다.
예를 들어, \01은 8진수 01로 컴파일하고, \0a는 \0 + 'a'로 컴파일합니다.
님의 의도대로라면 \t\0\xxx (xxx = '1')라고 써야 할 듯...

담배 고만 펴야겠다...

bugiii의 이미지

gyxor님. 일련의 쓰레드를 여시고 질문하시는 것을 볼 때, 지금 하시고자 하는 일이 어떤 외부의 텍스트로 된 데이터를 입력받아서 처리하고자 하시는 것인지요?

gyxor의 이미지

\01 이게 8진수라는걸 몰랐습니다.
그래서 265가 나왔군요..(256잘못썼습니다. 죄송)

실제 파일에서는 위와 같은 문제가 발생하지 않았습니다.
그것을 이상하게 여겼는데..

\01 이
null 과 1 로 16bit가 들어간것이 아니라

하위 -----------상위
100

이렇게 3bit만 들어간것이었군요..

난감했던 문제가 해결 됐습니다.
정말 감사합니다. ^^