【问题标题】:how to get volume serial number如何获取卷序列号
【发布时间】:2014-05-21 07:59:13
【问题描述】:

我正在尝试用 c++ 中的 winapi 获取卷序列号

我有以下代码:

DWORD VolumeSerialNumber=0; 
GetVolumeInformation(L"c:\\", NULL, NULL, &VolumeSerialNumber, NULL, NULL, NULL, NULL);

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

C:\Users\User>dir
 Volume in drive C is Windows
 Volume Serial Number is 2210-0DD0

如何将 571477456 转换为 2210-0DD0 ?

【问题讨论】:

    标签: c++ c winapi


    【解决方案1】:

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

    printf("VolumeSerialNumber: 0x%X\n", VolumeSerialNumber);
    

    将输出:

    0x22100dd0
    

    如果您真的需要完全相同的输出,您可以使用LOWORD 和HIWORD 宏将DWORD 分为上下WORDS:

    printf("Volume Serial Number is %04X-%04X\n",
        HIWORD(VolumeSerialNumber),
        LOWORD(VolumeSerialNumber));
    

    将输出:

    Volume Serial Number is 2210-0DD0
    

    【讨论】:

      【解决方案2】:

      为了将 int 转换为十六进制字符串,我找到了这个解决方案:

      char Hex_output [500];
      itoa (VolumeSerialNumber ,Hex_output,16);
      

      【讨论】:

      • 十六进制实际上只需要 8 个字符,因为它是 32 位。所以Hex_output 不应该超过 9 号。还有一个事实是 itoa 是一个非标准函数,所以更好的方法是自己编写代码或者只使用 sprintf,类似于 Jonathon Reinhart 的回答。跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2010-10-06
      • 1970-01-01
      • 2013-10-31
      • 2012-08-19
      • 2015-05-31
      • 2010-10-21
      相关资源
      最近更新 更多