8进制字符串转16进制字符串(一)

来源:互联网 发布:王贻芳 杨振宁 知乎 编辑:程序博客网 时间:2024/06/07 04:05
//写一个函数实现8进制字符串到16进制字符串的转换//例如://输入"755"结果是"1ED"//输入"777777777777"结果是"FFFFFFFFF" (注意超过了32位)//答案1//C99的标准支持long long类型,能满足超过32位的数据小于64位的数据#include <iostream.h>#include <string.h>//8进制字符串转16进制字符串//注:要保证pHexStr指向内存空间的长度bool ConvertOctalStrToHexStr(const char* pOctalStr, char* pHexStr){int nNum = 0;int nLength = 0;             //保存8进制字符串的长度int nHexCount = -1;          //保存16进制数的位数int nRemainder = 0;          //保存余数char* pHexNumStr = NULL; long long int64DecNum = 0;   //10进制64位数long long int64TmpNum = 0;//检查if (pOctalStr == NULL || pHexStr == NULL){return false;}//获取8进制字符串的长度nLength = strlen(pOctalStr);//8进制数转10进制for (int i = nLength - 1; i >= 0 ; i--){//8进制的数必须在0~7之间if (pOctalStr[i] < '0' || pOctalStr[i] > '7'){return false;}//求8的n次方int64TmpNum = 1;for (int j = 0; j < nLength-i-1; j++){int64TmpNum *= 8;}//字符转数据如,'0'->0nNum = pOctalStr[i] - 48;int64DecNum += nNum*int64TmpNum;}//申请内存空间放16进制数的字符串pHexNumStr = new char[nLength];   if (pHexNumStr == NULL){return false;}//清零memset(pHexNumStr, 0, nLength);//10进制转16进制while (true){nHexCount++;nRemainder = int64DecNum % 16;if (nRemainder >= 0 && nRemainder <= 9){nRemainder += 48;}if (nRemainder >= 10 && nRemainder <= 15){nRemainder += 55;}pHexNumStr[nHexCount] = nRemainder;int64DecNum /= 16;if (int64DecNum == 0){break;}}for (int k = 0; k <= nHexCount; k++){pHexStr[k] = pHexNumStr[nHexCount - k];}//释放内存空间if (pHexNumStr != NULL){delete[] pHexNumStr;pHexNumStr = NULL;}return true;}int main(int argc, char* argv[]){const char* pszOctrl = "755";char szHexBuffer[10] = {0};if (ConvertOctalStrToHexStr(pszOctrl, szHexBuffer) == false){printf("Convert false");}else{printf("%s\r\n", szHexBuffer);}return 0;}

0 0
原创粉丝点击