700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > c语言字符输出128 如何将128位整数转换为C中的十进制ASCII字符串?

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

时间:2021-11-30 16:25:22

相关推荐

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。