어떻게 scanf를 사용하여 정수 문자로 스캔하고 변환없이 부호없는 정수로 채울 수 있습니까? scanf 문자를 변환하지 않고 int로 변환
나는 다음과 같은 입력 문자 (I 가시성에 대한 진수에 넣어 한) 한 예를 보자5A 5F 03 00 FF FF 3D 2A
내가 원하는 처음 4 (때문에 INT 4 문자의 적합)를. 기본 10 (십진수)에서 이것은 221018 (빅 엔디안)과 같습니다. 큰! 그것이 내 int에서 원하는 것입니다. 이 예상대로 작동하는 것 같다 :
scanf("%s", &my_integer);
은 어떻게 든 LSB INT의에서 첫 번째 문자를 배치 엔디안 권리를 얻을 것 (왜?). 그러나 포인터가 문자 배열 (man 3 scanf)이어야하므로 컴파일러 경고를 생성합니다.
는 scanf() 사용하지 않고 다른 방법 : 읽을 수있는 문자를 지정하는 포인터 타입을 사용하는 것이 내가 여기에 어떤 변환을 수행하지 않으려는
for (int i = 0; i < 4; i++)
{
my_integer |= (getchar() << i * 8);
}
주, 나는 간단한 소원을. & my_integer가 길면 똑같은데, 8 문자를 읽고 저장합니다.
정말 간단합니다.
scanf의 사용에 대한 제 생각은 정확하지 않으며 더 나은 접근 방법이 있어야합니다. 어떻게 할 수 있습니까?
N.B. 유형 크기가 아키텍처에 따라 다르다는 것을 알고 있습니다.
'scanf'와'텍스트에 printf' 일; 그들은 텍스트를 읽고 변환합니다. 원시 이진 데이터로 작업하려고합니다. 'fread'와'fwrite' 함수는 이러한 원시 데이터의 I/O를 위해 설계되었습니다. –
"단순함." - 아니, 전혀. :) – unwind
@M Oehm 일반적으로 'scanf()와 그 이외의 텍스트'scanf ("% c"...)는'stdin' 스트림이있는 한 모든 바이너리 데이터를'char'로 멋지게 읽을 것입니다. 바이너리 모드입니다. – chux