문제

C/C ++에서 다음을 수행하는 방법에 대한 방법을 정확히 찾을 수 없습니다.

입력 : 16 진수 값, 예 : ffffffffff ...

입력을 읽기 위해 다음 코드를 시도했습니다.

uint16_t twoBytes;
scanf("%x",&twoBytes);

그것은 잘 작동하지만 2/4tes를 1 바이트로 어떻게 분할합니까? uint8_t 값 (또는 아마도 첫 바이트 만 읽을 수도 있습니다). 입력에서 첫 바이트를 읽고 선택 위치에 바이트 매트릭스에 저장하려고합니다.

uint8_t matrix[50][50]

C / C ++의 입력에서 형성 / 읽기에 능숙하지 않기 때문에 (지금까지 Scanf 만 사용 했음)이 작업을 수행하는 방법에 대한 다른 아이디어는 크게 높이 평가됩니다.

편집 : 프레드 함수를 사용하여 더 나은 방법을 찾았으므로 스트림에서 읽어야 할 바이트 수를 지정하고 (이 경우 stdin) 변수/배열에 저장하십시오.

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

매개 변수

PTR- 최소 크기의 (크기*카운트) 바이트의 메모리 블록에 대한 포인터.

크기 - 크기를 읽을 각 요소의 바이트의 크기.

카운트 - 크기 크기의 요소, 각 요소 수.

스트림 - 입력 스트림을 지정하는 파일 개체에 대한 포인터.

cplusplus ref

도움이 되었습니까?

해결책

%x 읽습니다 unsigned int, uint16_t (특정 플랫폼에서 동일하다고 생각했습니다).

하나의 바이트 만 읽으려면 다음을 시도하십시오.

uint32_t byteTmp;
scanf("%2x", &byteTmp);
uint8_t byte = byteTmp;

이것은 읽습니다 unsigned int, 그러나 두 문자를 읽은 후에 멈 춥니 다 (두 개의 16 진 문자는 8 비트 또는 1 바이트와 같습니다).

다른 팁

변수를 다음과 같이 분할 할 수 있어야합니다.

uint8_t LowerByte=twoBytes & 256;
uint8_t HigherByte=twoBytes >> 8;

몇 가지 생각 :

1) 문자로 읽고 수동으로 변환 - 고통 스럽습니다.

2) 4 개의 16 진수의 배수가 있다는 것을 알고 있다면 Twobytes로 읽은 다음 높은 = twobytes << 8을 가진 1 바이트 값으로 변환 할 수 있습니다. LOW = twobyets & ff;

3) %2x

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top