uint32_t 및 uint16_t 변수' 값을 인쇄하려면 어떻게 해야 합니까?
uint16_t 및 uint32_t 값을 인쇄하려고 하는데 원하는 출력이 나오지 않습니다.
#include <stdio.h>
#include <netinet/in.h>
int main()
{
uint32_t a = 12, a1;
uint16_t b = 1, b1;
a1 = htonl(a);
printf("%d---------%d", a1);
b1 = htons(b);
printf("\n%d-----%d", b, b1);
return 0;
}
나도 사용했어
printf("%"PRIu32, a);
에러를 나타내고 있습니다.
이러한 값을 인쇄하려면 어떻게 해야 하며 원하는 출력은 무엇입니까?
다음을 포함해야 합니다.inttypes.h이 모든 새로운 포맷 지정자를 원하는 경우intN_t컴파일러가 C99에 준거하고 있는 경우, 올바른 (휴대용) 방법이라고 생각됩니다.이런 거 쓰면 안 돼요%d또는%u만약 당신이 생각하는 것과 사이즈가 다를 경우.
다음을 포함합니다.stdint.h다른 많은 것들과 함께 확장합니다.예를 들어, 이 매크로를 사용하여printf/scanf콜 패밀리이는 ISO C99 표준의 섹션 7.8에서 다룹니다.
예를 들어 다음과 같은 프로그램이 있습니다.
#include <stdio.h>
#include <inttypes.h>
int main (void) {
uint32_t a=1234;
uint16_t b=5678;
printf("%" PRIu32 "\n",a);
printf("%" PRIu16 "\n",b);
return 0;
}
출력:
1234
5678
에서 정의된 매크로<inttypes.h>활자의 값을 인쇄하는 가장 올바른 방법입니다.uint32_t,uint16_t기타 등등. 하지만 그것만이 유일한 방법은 아닙니다.
개인적으로 이러한 매크로는 기억하기 어렵고 사용하기 불편합니다. (구문을 고려했을 때)printf포맷 문자열은 피할 수 없을지도 모릅니다.더 나은 시스템을 생각해 낼 수 있었다고 주장하는 것은 아닙니다.)
또는 값을 미리 정의된 유형으로 캐스팅하고 해당 유형에 대한 형식을 사용하는 방법도 있습니다.
종류들int그리고.unsigned int언어에 의해 최소 16비트 너비가 보장되므로 변환된 모든 유형의 값을 유지할 수 있습니다.int16_t또는uint16_t,각각 다음과 같다.유사하게,long그리고.unsigned long최소 32비트 너비 및long long그리고.unsigned long long최소 64비트 너비입니다.
예를 들어 다음과 같이 프로그램을 작성할 수 있습니다(몇 가지 추가 수정).
#include <stdio.h>
#include <stdint.h>
#include <netinet/in.h>
int main(void)
{
uint32_t a=12, a1;
uint16_t b=1, b1;
a1 = htonl(a);
printf("%lu---------%lu\n", (unsigned long)a, (unsigned long)a1);
b1 = htons(b);
printf("%u-----%u\n", (unsigned)b, (unsigned)b1);
return 0;
}
이 접근방식의 장점 중 하나는 C99 이전 구현에서도 사용할 수 있다는 것입니다.<inttypes.h>이러한 실장에서는, 대부분의 경우,<stdint.h>어느 쪽이든 상관없습니다만, 이 기술은 다른 정수 타입에 도움이 됩니다.
언급URL : https://stackoverflow.com/questions/12120426/how-do-i-print-uint32-t-and-uint16-t-variables-value
'programing' 카테고리의 다른 글
| 어레이에 새로운 요소를 추가하는 방법 (0) | 2022.07.10 |
|---|---|
| ## 및 __LINE__를 사용하여 C 매크로 생성(위치 지정 매크로와의 토큰 연결) (0) | 2022.07.10 |
| 변환 후 VueX Getter가 실행되지 않음 (0) | 2022.07.10 |
| v-model 값을 변경할 때 @change 이벤트를 방지하는 방법 (0) | 2022.07.10 |
| printf()는 "%f"만 사용해도 되는데, 왜 스캔f()는 두 배로 "%lf"가 필요합니까? (0) | 2022.07.10 |