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 |