将十六进制数字字符串转换成十进制数字字符串
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * hex2dec(const char * source);
int main(int argc, char *argv[])
{
char * hex = "fffffffffffffff";
char * dec = hex2dec(hex);
printf("%s", dec);
printf("\n");
return 0;
}
char * hex2dec(const char * source)
{
int last_non_zero_pos, i, hex_index;
char * dec_string;
/* log(16) = 1.204 */
const double length_rate = 1.3;
int hex_length = strlen(source);
int dec_length = hex_length * length_rate + 1;
/* Result goes here. */
int * dec = (int *)malloc(dec_length * sizeof(int));
/* Value of 0x1, 0x10, 0x100, 0x1000, ... */
int * curr = (int *)malloc(dec_length * sizeof(int));
for (i = 0; i < dec_length; i++)
{
dec[i] = curr[i] = 0;
}
/* 0x1 = 0000000000001(10) */
curr[0] = 1;
for (hex_index = 0; hex_index < hex_length; hex_index++)
{
/* Convert from right to left. */
int hex_pos = hex_length - 1 - hex_index;
char hex_curr_value = source[hex_pos];
int dec_curr_value, dec_index, curr_index;
/* Convert a single hex to dec. */
if (hex_curr_value <= '9' && hex_curr_value >= '0')
{
dec_curr_value = hex_curr_value - '0';
}
else if (hex_curr_value <= 'f' && hex_curr_value >= 'a')
{
dec_curr_value = hex_curr_value - 'a' + 10;
}
else if (hex_curr_value <= 'F' && hex_curr_value >= 'A')
{
dec_curr_value = hex_curr_value - 'A' + 10;
}
/* Add this hex to dec result. */
for (dec_index = 0; dec_index < dec_length; dec_index++)
{
dec[dec_index] += dec_curr_value * curr[dec_index];
}
for (dec_index = 0; dec_index < dec_length; dec_index++)
{
dec[dec_index + 1] += dec[dec_index] / 10;
dec[dec_index] = dec[dec_index] % 10;
}
/* 0x1->0x10, 0x10->0x100, 0x100->0x1000, ... */
for (curr_index = 0; curr_index < dec_length; curr_index++)
{
curr[curr_index] *= 16;
}
for (curr_index = 0; curr_index < dec_length; curr_index++)
{
curr[curr_index + 1] += curr[curr_index] / 10;
curr[curr_index] = curr[curr_index] % 10;
}
}
/* The output is reversed, so we should reverse it. */
last_non_zero_pos = dec_length - 1;
while (0 == dec[last_non_zero_pos])
{
last_non_zero_pos--;
}
dec_string = (char *)malloc((last_non_zero_pos + 2) * sizeof(char));
for (i = 0; i < last_non_zero_pos + 1; i++)
{
dec_string[i] = dec[last_non_zero_pos - i] + '0';
}
free(dec);
free(curr);
return dec_string;
}
分享到:
相关推荐
本文实例讲述了C++实现十六进制字符串转换为十进制整数的方法。分享给大家供大家参考。具体实现方法如下: /* * 将十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值 */ #include #include...
STM32十六进制字符串转十进制数值STM32十六进制字符串转十进制数值STM32十六进制字符串转十进制数值
本VI实现十进制字符串强制转换为16进制字符串,即输入10进制的0CDA可输出16进制的0CDA
Delphi进制转换,十进制,二进制,十六进制,字符串--超短精简
负十六进制字符串转换为十进制数,一个小技巧,仅供参考学习
本VI实现16进制字符串强制转换为10进制字符串,即输入16进制的03DF本VI可以输出10进制的03DF,如果需要区分大小写,请自行添加强制转换为大写或小写
在C#中,将16进制字符串转换成十进制数值
labview十六进制转十进制,输入字符串控件是十六进制显示。
//十进制转十六进制字符串 Console.WriteLine(Convert.ToString(d,16)); //输出: a //二进制字符串转十进制数 string bin = "1010"; Console.WriteLine(Convert.ToInt32(bin,2)); //输出: 10 //
STM32F429串口通信程序中十六进制、字符串,格式发送和接收实现
labview没有十六进制字符串到十进制字符串转换,所以我做了一个关于十六进制显示字符串到正常显示十六进制字符串转化的vi,需要可以带走。
此工具用于将16进制字符串转换成10进制byte数组
实现labview编写上位机以十进制输入数据直接以十六进制发送到下位机的转换程序
该软件可以完成十六进制数间的去空格,加空格,及转化为字符串,十进制等
android byte字节数组转换十六进制字符串一个demo。里面有几种转换测试代码。我的博客地址:http://blog.csdn.net/qq_16064871。
最近由于工作上的需要,遇到进制转换的问题。涉及到的进制主要是 十进制,十六进制,二进制中间的转换。还包括了一个字节数组 与十六进制字符串的互相转换。估计遇到蓝牙通信的朋友,应该用的上。
字符串转换器可以进行10进制转2进制转换,10进制转8进制/16进制转换。16进制转2进制或8进制10进制;字符串转10进制16进制,字符串转Unicode或Delphi DFM字符串。转换前选择一下要使用的转换模式转换即可。
Lua小程序十六进制字符串和二进制数据间的转换[借鉴].pdf
十进制整数和十六进制字符串转换,文件仅包含两个函数。