45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:怎么样将2个32位数字表示的10数值转化成字符串?

怎么样将2个32位数字表示的10数值转化成字符串?

2016-09-01 04:05:51 来源:www.45fan.com 【

怎么样将2个32位数字表示的10数值转化成字符串?

#include "stdio.h"

#include "stdlib.h"

#include "memory.h"

#define VEC_MAX_ROW 65

#define VEC_MAX_COL 32

//该函数实现将2个32位数字表示的10进制数值转化成字符串以便打印出来的功能

//如果需要将若干个32位数字表示的10进制数值转化成字符串,同可以在此基础上

//进行简单的扩大展,即可实现, 函数操作成功返回字符串指针,操作失败返回NULL

char* XulToStr(unsigned long ulHigh32, unsigned long ulLow32, char *szStr, int nStrLen)

{

unsigned long ulTmpHigh32 = ulHigh32;

unsigned long ulTmpLow32 = ulLow32;

int nVec[VEC_MAX_ROW][VEC_MAX_COL] = {0};

int nDigit[VEC_MAX_COL] = {0};

int nCarry = 0;

int nBitCount = 0;

int nRowSize = 0;

int nColSize = 0;

//入参有效性检查

if ((NULL == szStr) || (nStrLen < 20))

{ //表示一个64的数字最少需要20位

printf("/r/ncann't output formated string.");

return NULL;

}

//填充算法依赖的一个以2为底的幂数的数字向量表,如:

//2^0 1 {0, 0, 0, 0, 0, 0, 0, 0, 0, 1}

//2^1 2

//2^2 4

//... ...

//2^32 4294967296 {4, 2, 9, 4, 9, 6, 7, 2, 9, 6}

nVec[0][VEC_MAX_COL - 1] = 1;

nCarry = 0;

for (nRowSize = 1; nRowSize < VEC_MAX_ROW; nRowSize++)

{

for (nColSize = VEC_MAX_COL - 1; nColSize >= 0; nColSize--)

{

nVec[nRowSize][nColSize] = (nVec[nRowSize - 1][nColSize] * 2) % 10;

nVec[nRowSize][nColSize] += nCarry;

nCarry = (nVec[nRowSize - 1][nColSize] * 2) / 10;

//printf("%d", nVec[nRowSize][nColSize]);

}

//printf("/r/n");

}

//将低32位表示的10进制数(也是就一个32位系统所能表示的基本数值范围)

//先转化成一个数字串,后续超出了32位表示的数值的加法操作在此基础上

//进行

nColSize = VEC_MAX_COL - 1;

for (; ulTmpLow32; nDigit[nColSize--] = ulTmpLow32 % 10, ulTmpLow32 /= 10);

//对高32位进行逐位判断,如果某一位为1,则在上面的数字串基础上加上这

//一位以2为底的幂的数字串(数字串存放在向量表中)

if (ulTmpHigh32 > 0)

{

for (nBitCount = 0; nBitCount < 32; nBitCount++)

{

if (ulTmpHigh32 & (1 << nBitCount))

{

for (nColSize = VEC_MAX_COL -1; nColSize >= 0; nColSize--)

{

nDigit[nColSize] += nVec[32 + nBitCount][nColSize];

nDigit[nColSize - 1] += nDigit[nColSize] / 10;

nDigit[nColSize] %= 10;

}

}

}

}

//将计算完成后的数字串的前导数字0全部过滤掉

nColSize = 0;

while (!nDigit[nColSize++]);

//将计算结果的数字串转化为字符串,作为函数输出

for (nColSize--; nColSize < VEC_MAX_COL; nColSize++)

{

*szStr++ = nDigit[nColSize] + '0';

}

return szStr;

}

void main()

{

char szFormatString[100];

memset(szFormatString, '/0', 100);

XulToStr(0xffffffff, 0xffffffff, szFormatString, 100);

printf("%s", szFormatString);

getchar();

return;

}

 

本文地址:http://www.45fan.com/a/question/70545.html
Tags: 数字 2个 32位
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部