有没有一种方法可以在不使用外部库的情况下在c中打印n位(例如256位)整数?

问题描述 投票:0回答:1

我找到了一种方法来制作一个n位整数并对整数进行算术运算,但我不知道如何打印这些整数,我制作一个n位整数的方法只是制作一个数组,让说

char
,并使数组(数组元素的大小)/ n 个元素长。有谁知道如何打印这些吗?

  • 我有一个想法将 2 ^ x 的幂存储为字符串,但我意识到这是行不通的。
c x86-64 bigint
1个回答
0
投票

不能使用标准库函数转换为字符串或以基数 != 2, 4, 8, 16(通常为 2^n)打印。

如果您想使用这些基础进行打印,您可以轻松编写自己的函数

void printInteger(const void *buff, size_t size, int base)
{
    const char digits[] = "0123456789ABCDEF";
    const unsigned char *uc = buff + size - 1;
    unsigned nbits;
    unsigned mask;

    switch(base)
    {
        case 2:
            nbits = 1;
            break;
        case 4:
            nbits = 2;
            break;
        case 8:
            nbits = 3;
            break;
        case 16:
            nbits = 4;
            break;
        default: 
            return;
    }
    mask =  (1U << nbits) - 1;
    while(size--)
    {
        for(int nb = CHAR_BIT / nbits - 1; nb >= 0; nb--)
        {
            printf("%c", digits[(*uc >> (nb * nbits)) & mask]);
        }
        uc--;
    }
}

int main(void)
{
    unsigned test = 0x12345678;

    printInteger(&test, sizeof(test), 16);
    printf("\n");
    printInteger(&test, sizeof(test), 8);
    printf("\n");
    printInteger(&test, sizeof(test), 4);
    printf("\n");
    printInteger(&test, sizeof(test), 2);
    printf("\n");
}
© www.soinside.com 2019 - 2024. All rights reserved.