十进制long数据转化为十六进制,十六进制转化为十进制

{
   int i = 0;
   int tmp = 0;
   char *buffer = (char *)malloc(11);
   char *temp;
   buffer[0] = '0', buffer[1] = 'x', buffer[10] = '\0';
   temp = buffer + 2;
   for (i = 0; i < 8; i++)
   {
     tmp = num & 0x0000000f;
     printf("tmp=%d num=%d, num & 0x0000000f=%d\n", tmp, num, num & 0x0000000f);
     temp[7 - i] = (tmp < 10) ? ('0' + tmp) : ('A' + tmp - 10);
printf("temp[9 - i]=%d\n", temp[9 - i]);
      num = num >> 4;
   }
    printf("buffer=%s\n", buffer );
if(buffer != NULL)
{
free(buffer);
}

}

位操作,实现取10的余数

而下面则是去16余数,然后反序

{
char str[32] = "";
long x1 = 0xabc;
long x2 = 0;
int x3 = 0;
char c1;
x2 = x1 / 0x10;
int i = 0;
printf("x1 = %d x2 = %d\n", x1, x2);
while(x2 > 0)
{


x1 = x1 % 0x10;
printf("< x1 = %d x2 = %d x3 = %d", x1, x2, x3);
if(x1 < 10)
x1 = x1;
else
{
x1 = 'A' + x1 - 10;
}

str[i++] = x1;
x1 = x2;
x2 = x1 / 0x10;


}
if(x1 <= 10)
str[i++] = 'A' + x1 - 10;
printf("11 str=%s\n", str );
for(int j = i - 1; j >= i / 2; j --)
{
c1 = str[j];
str[j] = str[i - j - 1];
str[i - j - 1] = c1;
}
__asm(" MOVN A,#1"); /*第一个双引号右边有一个空格*/
printf("22 str=%s\n", str );
}
要将十六进制换为十进制数,可以使用STM32提供的库函数或者编写自定义函数来实现。 使用库函数的方法如下: 1. 首先,将十六进制数以字符串的形式存储在一个字符数组中。 2. 使用库函数`strtoul()`将字符数组换为无符号长整型数。 3. 将得到的无符号长整型数换为十进制数。 以下是使用库函数的示例代码: ```c #include <stdio.h> #include <stdlib.h> int main(void) { char hex_str[] = "0xFF"; // 十六进制数以字符串形式存储 unsigned long dec_num; dec_num = strtoul(hex_str, NULL, 16); // 将字符串换为无符号长整型数 printf("Hexadecimal: %s\n", hex_str); printf("Decimal: %lu\n", dec_num); return 0; } ``` 自定义函数的方法如下: 1. 首先,将十六进制数以字符串的形式存储在一个字符数组中。 2. 使用循环遍历字符数组,将每个字符换为对应的十进制数。 3. 根据十六进制数的位权,将每个字符对应的十进制数乘以相应的权重并累加,得到最终的十进制数。 以下是使用自定义函数的示例代码: ```c #include <stdio.h> #include <string.h> int hexToDec(char hex[]) { int len = strlen(hex); int base = 1; // 位权 int dec_num = 0; for (int i = len - 1; i >= 0; i--) { if (hex[i] >= '0' && hex[i] <= '9') { dec_num += (hex[i] - '0') * base; } else if (hex[i] >= 'A' && hex[i] <= 'F') { dec_num += (hex[i] - 'A' + 10) * base; } base *= 16; // 位权每次乘以16 } return dec_num; } int main(void) { char hex_str[] = "FF"; // 十六进制数以字符串形式存储 int dec_num; dec_num = hexToDec(hex_str); printf("Hexadecimal: %s\n", hex_str); printf("Decimal: %d\n", dec_num); return 0; } ``` 无论使用哪种方法,都可以将十六进制换为十进制数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值