繁体   English   中英

打印 integer 的位数

[英]print number of digits of an integer

例如,如何将签名的 integer 的最后 3 位打印为十六进制数?

int num = -5;

printf("%03X\n", num);

打印FFFFFFFB

我需要它来打印FFB

我相信最好和最清晰的方法是使用位掩码来隐藏除最后几位之外的所有内容。 在您的情况下,这将是printf("%X\n", num & 0xfff);

0xfffffffb
0x00000fff
  -----|||
0x00000ffb

您也可以调整它以使用更高的位。 所以如果你想从0xdeadbeef中提取0xadb ,它看起来像这样:

(0xdeadbeef & 0xfff000) >> 12 // gives 0xadb

(0xdeadbeef & 0xfff000)将掩盖您想要的位,留下0xadb000 要删除这些零,需要右移 12 位(每个十六进制数字可以代表 4 位,我们需要删除 3 位数字,因此 4*3 = 12)。

怎么样:

void printLastThreeHex(int num)
{
    size_t len = 0;
    char tmp[sizeof(int)*2 + 1]; // two hex chars for each byte + null char
    char* str = tmp;

    sprintf(tmp, "%03x", num);
    len = strlen(tmp);
    if (len > 3)
    {
        str = tmp + len - 3;
    }

    printf("%s\n", str);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM