char型数据里面的数据是以16进制数存储的,每个char型数据的可能值是从0x00~0xff(表示为2进制范围是从00000000~11111111)的16进制数,即每个char型数据里面能存储8位的数据。如果存储类型为BCD码,那也就是按照2进制来存储数据。对应表如下:
Int 二进制 BCD码 Hex
0 0000 0000 0
1 0001 0001 1
2 0010 0010 2
3 0011 0011 3
4 0100 0100 4
5 0101 0101 5
6 0110 0110 6
7 0111 0111 7
8 1000 1000 8
9 1001 1001 9
10 1010 1010 A
11 1011 1011 B
12 1100 1100 C
13 1101 1101 D
14 1110 1110 E
15 1111 1111 F
实现转换的代码如下:
#include<iostream>
#include<time.h>
using namespace std;
string Char2BCD(unsigned char *c,int len)
char s[100];
char c1,c2;
string str="";
for(int i=0;i<len;i++)
c1= c[i]&0x0f;//提取2进制数的低4位
char型数据里面的数据是以16进制数存储的,每个char型数据的可能值是从0x00~0xff(表示为2进制范围是从00000000~11111111)的16进制数,即每个char型数据里面能存储8位的数据。如果存储类型为BCD码,那也就是按照2进制来存储数据。对应表如下:Int 二进制 BCD码 Hex 0 0000 0000 01 0001 00
需要注意以下几点:
①:该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。
②:当第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
③:该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以...
//模板参数:S开始的位,N位的个数
//样例数据 {0x12 0x34 0x56 0x78 0x9F} if (N=4,S=3) then 提取出的数字为4567
#include
#include
#include
template
class bcd_to_int
public:
static int parse(char* src)
static_assert
举例说明:假设int型整数为12345678,转化为BCD码后成为了32位的12345678,表示4个字节。#include<stdio.h>
typedef unsigned long u32;
u32 inttoBCD(int m)
u32 r=0,n=1;
int a;
while(m)
a=m %10;
m=m/10;
/*************************************************************************************************************************
*函数 :
void HextoBCD(u8 *pBuff,u8 len)
*功能 :
十六进制转为BCD码
<br />int IntToBcd(int value,char* buf,int buf_len)<br />
{<br />
char ascii[16]={0};<br />
int v;<br />
int i,j,len,ret=0;<br /><br />
if(buf==NULL||buf_len<=0){<br />
debug_error("buf is null/n");<br />
goto error;<
unsigned char bcd_to_decimal(unsigned char bcd) {
return ((bcd >> 4) * 10) + (bcd & 0x0F);
unsigned int bcd_to_decimal_16(unsigned char *bcd, int len) {
unsigned int result = 0;
for (int i = 0; i < len; i++) {
result = (result * 100) + bcd_to_decimal(bcd[i]);
return result;
其中,`bcd_to_decimal`函数将一个8位的BCD码转换为10进制数,`bcd_to_decimal_16`函数将一个16位的BCD码数组转换为10进制数。