저는 this question에서 왔는데 여기서 0-16 (각 4 비트) 사이에 있어야하는 단일 바이트에 2 개의 정수를 쓰려고했습니다. 지금은 파일을 닫고, 읽고 다른 프로그램을 실행하면이진 파일 쓰기 후 음수를 읽습니다
.... 문제는
for (int i = 0; i < 2; ++i)
{
char byteToRead;
file.seekg(i, std::ios::beg);
file.read(&byteToRead, sizeof(char));
bool correct = file.bad();
unsigned int num1 = (byteToRead >> 4);
unsigned int num2 = (byteToRead & 0x0F);
}
때때로이 다른 시간 나는 첫 번째 숫자는 부정적인 나와서 데에 불과 작동 두 번째 숫자는 항상 10 또는 9와 같은 것이고 내가 쓴 숫자가 가장 확실한 것은 아닙니다!
예를 들어, 처음 두 숫자는 작동하지만 다음 숫자는 작동하지 않습니다. examplem를 들어, 위의 읽을의 출력은 다음과 같습니다 바이트 1에서
At byte 0, num1 = 5 and num2 = 6
At byte 1, num1 = 4294967289 and num2 = 12
, NUM1 그것은 12 잘 쓰기 만 9 < < 4가 작동하지 않는 것 같다 (9)을해야한다. 내 끝에있는 byteToWrite는 byteToWrite -100 'œ''
입니다. 나는 비슷한 문제가있는 this question을 체크 아웃했는데, 내 엔디안이 바로 여기있는 것처럼 느껴집니다.
을 예컨대 캐스트 (또는 별칭)
byteToRead
unsigned char
을 할 수있다. –오타가 질문 작성시 감사합니다. – user99999991
시프트 할 때 부호 확장을 피하기 위해 부호없는 숫자를 사용하는 것이 좋습니다. –