윈도우즈에서 서명되지 않은 __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 __int64
win64, otherunsigned int
)
자세한 내용은 이 MSDN을 확인해보시거나, 이 섹션만 확인해보시기 바랍니다 :)
또한, 관심이 있다면, 다른 MSDN들은 이것과 이것을 좋아합니다.
# C++ 윈도우 포맷 스트링 MSVC 비주얼 스튜디오 사이즈_tint64_tint64_tint
언급URL : https://stackoverflow.com/questions/18107426/printf-format-for-unsigned-int64-on-windows
'programing' 카테고리의 다른 글
외국 열쇠가 왜 이래요? (0) | 2023.10.22 |
---|---|
DataTable을 직렬화할 수 없습니다.DataTable 이름이 설정되지 않았습니다. (0) | 2023.10.22 |
WordPress 내에 응답 테이블을 만듭니다. (0) | 2023.10.22 |
자바스크립트에 유니코드 문자 삽입 (0) | 2023.10.22 |
워드프레스 열기ID가 StackOverflow와 함께 작동하지 않습니다. (0) | 2023.10.22 |