확장 ASCII 코드를 부호없는 char에 할당 할 때 값이 파일에 기록 될 때 위쪽으로 이동한다는 것을 알았습니다. 확장 ASCII 코드 이동
나는 잠시 내 질문을 제시하는이 간단한 프로그램으로 내 코드를 응축 :#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned char testascii[3];
testascii[0] = 122;
testascii[1] = 150;
testascii[2] = 175;
printf("%d\n", testascii[0]);
printf("%d\n", testascii[1]);
printf("%d\n", testascii[2]);
return 0;
}
나는이 간단한 프로그램을 실행하면, 나는이 터미널 출력을 얻을 :
122
150
175
이 정확합니다.
FILE *f;
f = fopen("/mystuff/testascii", "wb");
if (f == NULL)
{
printf("Error opening file\n");
exit(1);
}
fwrite(testascii, 1, 3, f);
fclose(f);
그것은 제대로 실행하지만 지금은 O/S로 이동하면 실행 :
od -c testascii
내가이 출력을 얻을 지금 위의 프로그램에 다음을 추가하면
:
0000000 z 226 257
0000003
표준 ASCII 코드 (128 미만)가 올바르게 표시됩니다. 그러나 확장 ASCII 코드 (127 이상)는 변경됩니다. 나는 그들이 150과 175가 되길 기대하지만 그들은 226과 257입니다.
파일 열기 명령에서 2 진 플래그를 제거하면 결과는 동일합니다. 최종 검사로서
대신 이진 인쇄 (에 fwrite)의, 다시 코드를 변경하고 배열을 통해 루프와 같은 각 항목의 fprintf를했다 : 여기fprintf (fp, "%d", appendtxt[i]);
가에 대한 OD 디스플레이의를 그 :
0000000 1 2 2 1 5 0 1 7 5
0000011
이 모든 것은 이진 인쇄 (fwrite)가 예상 한대로 수행되지 않는다는 것을 알려줍니다. fwrite 명령이 이진 데이터를 파일에 쓰는 것을 이해합니다. 이 경우 128보다 작은 값을 성공적으로 작성하지만 128보다 크거나 같은 값으로 실패하는 이유는 무엇입니까?
환경 : 코드 :: 블록 16.01 를 CentOS 7.1
참고 :이 비슷한 질문을 발견했다 : fwrite with non ASCII characters을하지만 내 상황에 도움을 보이지 않았다. 내가 틀렸을 수도있다. 그 게시물에서 뭔가를 놓친다면 알려주시겠습니까?
"od"는 "OCTAL 덤프"를 나타냅니다. 8 진수 226은 150입니다. –
그리고 257은 십진수 바이트 값이 될 수 없습니다. 십진수 175는 8 진수입니다. –