2013-07-05 3 views
3

바이트를 파일에 써야합니다. 1 바이트의 자연 표현은 std::uint8_t입니다. 문제는 istream.read()ostream.write()char과 작동한다는 것입니다. 나는 두 가지 유형, 예를 들면 사이의 변환 수 :스트림에 안전하게 바이트 쓰기

char c; 
input.read(&c, 1); 
uint8_t b = (uint8_t)c; 
uint8_t b = …; 
char c = (char)b; 
output.write(&c, 1); 
char 종종 서명 유형 및 AFAIK 기록 비트 패턴이 될 것입니다 어떤 보장이 없기 때문에 문제가 될 수

int8_t의 원래 내용과 동일합니다.

컴파일러와 OS간에 작동하는지 확인해야합니다. 따라서 한 컴퓨터에 무언가를 쓰면 다른 컴퓨터에서도 동일하게 읽을 수 있습니다.

이렇게하려면 표준을 준수하는 방법이 있습니까?

+0

'std :: basic_istream '등 사용하는 것은 어떻습니까? –

+0

'연산자''와'연산자''를 사용하여 시도해보십시오. 문제가 발생하지 않도록 읽고 쓰고 문자로만 작업하십시오. – andre

답변

1

unsigned char에서 char으로의 변환은 완벽하게 정상적으로 수행되어야하며 정확하게 수행해야합니다. 세 가지 char 유형 모두 레이아웃 호환 가능합니다.

너비가 아닌 정수 형식을주의하여 char 등으로 변환하기 전에 먼저 uint8_t으로 변환하고 다른 방향으로 변환하면됩니다.

+0

'char'에 서명하면 2의 보수를 사용할 수 있습니까? – svick

+0

@svick : 그것들 중 어느 것도 의미하지는 않지만 걱정할 필요가있는 것도 아닙니다. –

관련 문제