如何获得卷序列号

use*_*233 3 c c++ winapi

我试图用c ++中的winapi获取卷序列号

我有以下代码:

DWORD VolumeSerialNumber=0; 
GetVolumeInformation(L"c:\\", NULL, NULL, &VolumeSerialNumber, NULL, NULL, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)

它工作正常并返回,VolumeSerialNumber=571477456 但在cmd我使用时,dir我得到:

C:\Users\User>dir
 Volume in drive C is Windows
 Volume Serial Number is 2210-0DD0
Run Code Online (Sandbox Code Playgroud)

我怎么转换571477456到2210-0DD0?

Jon*_*art 7

您只需要使用%X格式说明符以十六进制而不是十进制打印值:

printf("VolumeSerialNumber: 0x%X\n", VolumeSerialNumber);
Run Code Online (Sandbox Code Playgroud)

哪个会输出:

0x22100dd0
Run Code Online (Sandbox Code Playgroud)

如果您确实需要完全相同的输出,可以使用和宏DWORD将其分隔为下部和上部:WORDSLOWORDHIWORD

printf("Volume Serial Number is %04X-%04X\n",
    HIWORD(VolumeSerialNumber),
    LOWORD(VolumeSerialNumber));
Run Code Online (Sandbox Code Playgroud)

哪个会输出:

Volume Serial Number is 2210-0DD0
Run Code Online (Sandbox Code Playgroud)