怎么样将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; }