C - 将十进制数转换为压缩 BCD

标签 c

如何在不使用 sprintf 的情况下在 C 中实现这些转换?

20 => 0x20
12 => 0x12

目前我有:

int year = 12;
int month = 10;
int day = 9;
unsigned char date[3];

date[0] = year & 0xFF;
date[1] = month & 0xFF;
date[2] = day & 0xFF;

日期将包含 { 0x0C, 0x0A, 0x09 } 但我希望它是 { 0x12, 0x10, 0x09 }

最佳答案

您只需检索以十进制为基数的每个数字,然后将其乘以对应的十六进制数。

#include <stdio.h>

int hex(int v){
int total = 0;
int resultbase = 1;
while(v > 0 ){
    total += resultbase * (v % 10);
    resultbase *= 16;
    v /= 10;
}

return total;
}

 int  main(){
printf ("12 => %x, 20 => %x\n", hex(12), hex(20));
return 0;

关于C - 将十进制数转换为压缩 BCD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12798375/

相关文章:

c - 标准输入/标准输出重定向,输入不起作用

CS50 - 恢复 - 操作 Card.raw PSET3

c - C中(二进制)逻辑运算符语句的行为

c++ - 是否可以确定(在运行时)功能是否已实现?

c++ - 从libuv句柄继承

c - 指针和动态内存

c - Matlab MEX 文件 - 索引正确,UINT32 值不正确

c - 如果 child 用 exec() 覆盖图像, parent 和 child 是否仍然共享信号控制?

具有重复项的 C 头文件

c - RSA 算法 - 已知 n 如何获得 p & q