bcd处理小源码
bcd处理小源码
#include <string>
#include <stdint.h>
void BCD2ASC(unsigned char *asc, const unsigned char *bcd, int len)
{
static unsigned char bcd2ascii[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
static unsigned char ascii2bcd1[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
static unsigned char ascii2bcd2[6] = { 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F };
unsigned char c = 0;
unsigned char i;
for (i = 0; i < len; i++) {
//first BCD
c = *bcd >> 4;
*asc++ = bcd2ascii[c];
//second
c = *bcd & 0x0f;
*asc++ = bcd2ascii[c];
bcd++;
}
}
static std::string BCD2ASC( const unsigned char *bcd, int len)
{
static unsigned char bcd2ascii[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
static unsigned char ascii2bcd1[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
static unsigned char ascii2bcd2[6] = { 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F };
unsigned char c = 0;
unsigned char i;
std::string asc;
for (i = 0; i < len; i++) {
//first BCD
c = *bcd >> 4;
asc.push_back( bcd2ascii[c]);
//second
c = *bcd & 0x0f;
asc.push_back( bcd2ascii[c]);
bcd++;
}
return asc;
}
#include <stdio.h>
int main(int argc, char const *argv[])
{
// unsigned char bcd[]={0x33,0xFF,0x55};
// unsigned char asc[100]={0};
// BCD2ASC(asc,bcd,sizeof(bcd));
// auto ch=BCD2ASC(bcd,sizeof(bcd));
// printf("%s\r\n",asc);
// printf("%s\r\n",ch.c_str());
const int POS_ADDR = 14;
const int POS_VERSION = 47;
uint8_t data[]={0x68,0x38,0x00,0xC1,0x01,0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x01,0x51,0x30,0x00,0x00,0x00,0x00,0x28,0x28,0x00,0x80,0x04,0x80,0x04,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xD0,0x07,0x00,0x00,0x21,0x03,0x13,0x21,0x03,0x13,0x59,0x52,0x54,0x41,0x30,0x06,0x21,0x99,0x01,0x00,0x00,0x07,0x16};
std::string master_ver;
master_ver.clear();
static unsigned char bcd2ascii[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
unsigned char * bcd=(uint8_t *)(data + POS_VERSION+2);
master_ver.push_back( bcd2ascii[*bcd >> 4]);
master_ver.push_back( bcd2ascii[*bcd & 0x0f ]);
bcd=(uint8_t *)(data + POS_VERSION+1);
master_ver.push_back( bcd2ascii[*bcd >> 4]);
master_ver.push_back( bcd2ascii[*bcd & 0x0f ]);
bcd=data + POS_VERSION;
master_ver.push_back( bcd2ascii[*bcd >> 4]);
master_ver.push_back( bcd2ascii[*bcd & 0x0f ]);
bcd=data + POS_VERSION+3;
master_ver.push_back( bcd2ascii[*bcd >> 4]);
master_ver.push_back( bcd2ascii[*bcd & 0x0f ]);
bcd=data + POS_VERSION+4;
master_ver.push_back( bcd2ascii[*bcd >> 4]);
master_ver.push_back( bcd2ascii[*bcd & 0x0f ]);
printf("%s\r\n",master_ver.c_str());
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
2019-10-20 转换函数conversion function