c语言字符输出128,如何将128位整数转换为C中的十进制ASCII字符串?

部门不是必需的:

#include

#include

typedef unsigned long uint32;

/* N[0] - contains least significant bits, N[3] - most significant */

char* Bin128ToDec(const uint32 N[4])

{

// log10(x) = log2(x) / log2(10) ~= log2(x) / 3.322

static char s[128 / 3 + 1 + 1];

uint32 n[4];

char* p = s;

int i;

memset(s, '0', sizeof(s) - 1);

s[sizeof(s) - 1] = '\0';

memcpy(n, N, sizeof(n));

for (i = 0; i < 128; i++)

{

int j, carry;

carry = (n[3] >= 0x80000000);

// Shift n[] left, doubling it

n[3] = ((n[3] << 1) & 0xFFFFFFFF) + (n[2] >= 0x80000000);

n[2] = ((n[2] << 1) & 0xFFFFFFFF) + (n[1] >= 0x80000000);

n[1] = ((n[1] << 1) & 0xFFFFFFFF) + (n[0] >= 0x80000000);

n[0] = ((n[0] << 1) & 0xFFFFFFFF);

// Add s[] to itself in decimal, doubling it

for (j = sizeof(s) - 2; j >= 0; j--)

{

s[j] += s[j] - '0' + carry;

carry = (s[j] > '9');

if (carry)

{

s[j] -= 10;

}

}

}

while ((p[0] == '0') && (p < &s[sizeof(s) - 2]))

{

p++;

}

return p;

}

int main(void)

{

static const uint32 testData[][4] =

{

{ 0, 0, 0, 0 },

{ 1048576, 0, 0, 0 },

{ 0xFFFFFFFF, 0, 0, 0 },

{ 0, 1, 0, 0 },

{ 0x12345678, 0x90abcdef, 0xfedcba90, 0x8765421 }

};

printf("%s\n", Bin128ToDec(testData[0]));

printf("%s\n", Bin128ToDec(testData[1]));

printf("%s\n", Bin128ToDec(testData[2]));

printf("%s\n", Bin128ToDec(testData[3]));

printf("%s\n", Bin128ToDec(testData[4]));

return 0;

}

输出:

0

1048576

4294967295

4294967296

11248221411398543556294285637029484152

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值