programing

윈도우즈에서 서명되지 않은 __int64의 printf 형식

javamemo 2023. 10. 22. 19:21
반응형

윈도우즈에서 서명되지 않은 __int64의 printf 형식

나는 인쇄해야 합니다.ULONGLONG값을 매깁니다.unsigned __int64). 어떤 형식을 사용해야 합니까?printf? 발견했습니다.%llu다른 질문에도 리눅스 전용이라고 합니다.

도와주셔서 고마워요.

Google을 사용하여 "Visual Studio printfunsigned __int64"를 검색하면 접두사를 사용할 수 있음을 나타내는 첫 번째 페이지가 생성됩니다.I64, 그래서 형식 지정자는%I64u.

%llu인쇄하는 방법이 표준입니다.unsigned long long, 이것은 단지 리눅스를 위한 것이 아니라, 실제로는 C99에 있습니다.따라서 문제는 비주얼 스튜디오가 아닌 C99 호환 컴파일러를 사용하는 것입니다.

C99 7.19.6 포맷된 입출력 기능

ll(ell-ell) 다음 d, i, o, u, x 또는 X 변환 지정자를 긴 int 인수 또는 서명되지 않은 긴 int 인수에 적용하거나 다음 n 변환 지정자를 긴 int 인수의 포인터에 적용하도록 지정합니다.

표준 C 라이브러리에서 지정한 형식을 사용하는 것을 추천합니다.서로 다른 아키텍처 간에 서명되지 않은 64비트 정수에 대한 형식 지정자를 사용자에게 제공하도록 설계되었습니다.

예는 다음과 같습니다(C++가 아닌 C의 경우).

#include <stdint.h>   /* For uint64_t */
#include <inttypes.h> /* For PRIu64 */
#include <stdio.h>    /* For printf */
#include <stdlib.h>   /* For exit status */

int main()
{
    uint64_t n = 1986;
    printf("And the winning number is.... %" PRIu64 "!\n", n);
    return EXIT_SUCCESS;
}

Printf에는 다음을 위한 다양한 형식 지정자가 있습니다.unsigned long long컴파일러에 따라서, 나는 본적이 있습니다.%llu그리고.%Lu. 일반적으로 사용할 것을 권합니다.std::cout그리고 그 대신에 유사합니다.

다음은 HEX 출력에 대한 해결책입니다.

printf("%08X%08X", static_cast<UINT32>((u64>>32)&0xFFFFFFFF), static_cast<UINT32>(u64)&0xFFFFFFFF));

나처럼 항상 잊어버리는 남자들에겐
Visual Studio를 사용하는 경우(구체적으로 MSVC 컴파일러를 선택하는 경우),

%I64u위해서uint64_t==unsigned __int64==unsigned long long

%I64d위해서int64_t==__int64==long long

%Iu위해서size_t(==unsigned __int64win64, otherunsigned int)

자세한 내용은 이 MSDN을 확인해보시거나, 이 섹션만 확인해보시기 바랍니다 :)
또한, 관심이 있다면, 다른 MSDN들은 이것이것을 좋아합니다.

# C++ 윈도우 포맷 스트링 MSVC 비주얼 스튜디오 사이즈_tint64_tint64_tint

언급URL : https://stackoverflow.com/questions/18107426/printf-format-for-unsigned-int64-on-windows

반응형