[C++] char data[20] = "\t\01"; 의 앞2바이트를 (sho
글쓴이: gyxor / 작성시간: 일, 2004/04/25 - 4:30오후
#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가 찍힙니다.
이런현상이 왜 일어 나는지 궁금합니다
또 이것을 숫자일때에도 가능하게 하는 방법은 없는지 알려주시면 감사하겠습니다.
답변부탁드립니다.
Forums:
256이 아니라 265가 출력되겠죠 ^^;인텔계열이라면 little
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')라고 써야 할 듯...
담배 고만 펴야겠다...
gyxor님. 일련의 쓰레드를 여시고 질문하시는 것을 볼 때, 지금 하시
gyxor님. 일련의 쓰레드를 여시고 질문하시는 것을 볼 때, 지금 하시고자 하는 일이 어떤 외부의 텍스트로 된 데이터를 입력받아서 처리하고자 하시는 것인지요?
문자열스트림관련 해서 공부하고 있습니다.
\01 이게 8진수라는걸 몰랐습니다.
그래서 265가 나왔군요..(256잘못썼습니다. 죄송)
실제 파일에서는 위와 같은 문제가 발생하지 않았습니다.
그것을 이상하게 여겼는데..
\01 이
null 과 1 로 16bit가 들어간것이 아니라
하위 -----------상위
100
이렇게 3bit만 들어간것이었군요..
난감했던 문제가 해결 됐습니다.
정말 감사합니다. ^^
댓글 달기