-
目录
- 1、将压缩BCD码转为BIN码
- 2、将压缩BCD码数组转为BIN码数组
- 3、将BIN码转为压缩BCD码
- 4、将BIN码数组转为压缩BCD码数组
- 5、将ASCII码转为BIN码
- 6、将ASCII码(字符串)转为BIN码数组
- 7、将BIN码转为 ASCII码
- 8、将BIN码数组转为ASCII码(字符串)
- 9、将 ASCII码(字符串)转换为 压缩 BCD 码
- 10、将 压缩 BCD 码数组 转换为 ASCII码(字符串)
-
1、将压缩BCD码转为BIN码
(举例: BCD码 0x56 → 10进制 56 → BIN码 0x38)/*************************** 函数名: BcdToBin 功能描述: 将 BCD码转为 BIN码 参数: BCD码 返回: BIN码 ***************************/ uint8_t BcdToBin(uint8_t bBcd) { uint8_t bBin; bBin = (((bBcd >> 4) & 0x0F) * 10 ) + (bBcd & 0x0F); return bBin; }
-
2、将压缩BCD码数组转为BIN码数组
(举例: BCD码数组 {0x12, 0x34, 0x56, 0x78} → 10进制 12345678 → BIN码数组 {0x00, 0xBC, 0x61, 0x4E})/*************************** 函数名: BcdArrayToBinArray 功能描述: 将BCD码数组转为BIN码数组 参数: pBcd:转换前的BCD码数组, pBin:转换后的BIN码数组, len:代转换的数组长度 注意:此函数支持的最大转换数组长度为 8 ***************************/ void BcdArrayToBinArray(uint8_t *pBin, uint8_t *pBcd, uint8_t len) { uint8_t i, j = 0; uint8_t Calclen = 0; uint8_t BinArr[8] = {0}; uint64_t BinTemp = 0; uint64_t Cnt10x = 1; for(i = 0; i < len; i++) { Cnt10x = 1; Calclen = ((len - i - 1) * 2); for(j = 0; j < Calclen; j++) { Cnt10x *= 10; } BinTemp += (BcdToBin(pBcd[i]) * Cnt10x); // 此处 BinTemp 值为 0x00BC614E } memcpy(BinArr, &BinTemp, len); // 将BIN数据拆分为BIN码数组(此时数组高低位是相反的) for(i = 0; i < len; i++) { pBin[i] = BinArr[len - 1 - i]; // 将数组进行高低位转换 } }
-
3、将BIN码转为压缩BCD码
(举例: BIN码 0x38 → 10进制 56 → BCD码 0x56)/*************************** 函数名: BinToBcd 功能描述: 将 16进制数据转为 BCD码 参数: Bin码 返回: BCD码 ***************************/ uint8_t BinToBcd(uint8_t bBin) { uint8_t bBcd; bBcd = ((bBin / 10) * 16) + (bBin % 10); return bBcd; }
-
4、将BIN码数组转为压缩BCD码数组
(举例: BIN码数组{0x49, 0x96, 0x02, 0xD2} → 10进制1234567890 → BCD码数组{0x12, 0x34, 0x56, 0x78, 0x90})/*************************** 函数名: BinArrayToBcdArray 功能描述: 将 BIN码数组转为 BCD码数组 参数: pBin:转换前的 BIN码数组, pBcd:转换后的 BCD码数组, len:待转换的数组长度 返回: 转换后得到 BCD码数组的有效数据长度 注意:待转换的 BIN码数组对应的 10进制值不能大于 9999 9999 9999 9999 ***************************/ uint8_t BinArrayToBcdArray(uint8_t *pBcd, uint8_t *pBin, uint8_t len) { uint8_t i, j, k = 0; uint8_t Calclen, temp = 0; uint64_t BinTemp = 0; uint64_t Cnt10x = 1; for(i = 0; i < len; i++) { BinTemp += (pBin[i] << ((len - i - 1) * 8)); // 将BIN数组转为整型数据 } k = 0; for(i = 0; i < 8; i++) { Cnt10x = 1; Calclen = ((8 - i - 1) * 2); for(j = 0; j < Calclen; j++) { Cnt10x *= 10; } temp = BinTemp / Cnt10x; BinTemp %= Cnt10x; if(temp > 0 || k > 0) { pBcd[k] = HexToBcd(temp); k++; } } return k; // 转换后得到 BCD码数组的有效数据长度 }
-
5、将ASCII码转为BIN码
(举例:ASCII码’3’ → 10进制3 → BIN码0x03)/*************************** 函数名: AsciiToBin 功能描述: 将 ASCII码转为 BIN码 参数: Ascii码 返回: Bin码 ***************************/ uint8_t AsciiToBin(uint8_t bAscii) { uint8_t bHex; bHex = bAscii - '0'; return bHex; }
-
6、 将ASCII码(字符串)转为BIN码数组
(举例: ASCII码(字符串)“1234567890” → 10进制1234567890 → BIN码数组{0x49, 0x96, 0x02, 0xD2})/*************************** 函数名: AsciiArrayToBinArray 功能描述: 将 ASCII码(字符串)转为 BIN码数组 参数: pAscii:转换前的 ASCII码(字符串), pBin:转换后的 BIN码数组, len:待转换的字符串长度 返回: 转换后得到 BIN码数组的有效数据长度 注意:转换后的 BIN数组最大长度为 8 ***************************/ uint8_t AsciiArrayToBinArray(uint8_t *pBin, uint8_t *pAscii, uint8_t len) { uint8_t i, j, k = 0; uint8_t Calclen, temp = 0; uint8_t BinArr[8] = {0}; uint64_t BinTemp = 0; uint64_t Cnt10x = 1; for(i = 0; i < len; i++) { Cnt10x = 1; Calclen = len - i - 1; for(j = 0; j < Calclen; j++) { Cnt10x *= 10; } BinTemp += (pAscii[i] - '0') * Cnt10x; } memcpy(BinArr, &BinTemp, 8); k = 0; for(i = 0; i < 8; i++) { temp = BinArr[8 - 1 - i]; if(temp > 0 || k > 0) { pBin[k] = temp; k++; } } return k; // 转换后得到 BIN码数组的有效数据长度 }
-
7、将 BIN码转为 ASCII码
(举例:BIN码0x03 → 10进制3 → ASCII码’3’)/*************************** 函数名: BinToAscii 功能描述: 将 BIN码转为 ASCII码 参数: Bin码 返回: Ascii码 注意:此处代转换的 BIN码对应的十进制值不能大于9 ***************************/ uint8_t BinToAscii(uint8_t bBin) { uint8_t bAscii; bAscii = bBin + '0'; return bAscii; }
-
8、将BIN码数组转为ASCII码(字符串)
(举例: BIN码数组{0x49, 0x96, 0x02, 0xD2} → 10进制1234567890 → ASCII码(字符串)“1234567890”)/*************************** 函数名: BinArrayToAsciiArray 功能描述: 将 BIN码数组转为 ASCII码(字符串) 参数: pBin:转换前的 BIN码数组, pAscii:转换后的 ASCII码(字符串), len:待转换的 BIN码数组 返回: 转换后得到 ASCII码(字符串)有效长度 注意:转换前的 BIN数组最大长度为 7 ***************************/ uint8_t BinArrayToAsciiArray(uint8_t *pAscii, uint8_t *pBin, uint8_t len) { uint8_t i, k, Flag = 0; uint8_t AsciiArr[20] = {0}; uint64_t BinTemp = 0; uint64_t temp1, temp2 = 0; for(i = 0; i < len; i++) { BinTemp += (pBin[i] << ((len - i - 1) * 8)); // 将BIN数组转为整型数据 } k = 0; Flag = 0; while(Flag == 0) { temp1 = BinTemp / 10; if(temp1 != 0) { temp2 = BinTemp % 10; BinTemp = temp1; AsciiArr[k] = temp2 + 0x30; k++; } else if(k == 0) { pAscii[k] = '0'; k++; Flag = 1; } else { AsciiArr[k] = BinTemp + 0x30; k++; for(i = 0; i < k; i++) { pAscii[i] = AsciiArr[k - 1 - i]; } Flag = 1; } } return k; // 转换后得到 ASCII码数组的有效数据长度 }
-
9、将 ASCII码(字符串)转换为 压缩 BCD 码
(举例 :ASCII码(字符串)‘123456’ 转为 压缩 BCD 码0x12 0x34 0x56)/*************************** 函数名: AsciiArrayToBcdArray 功能描述: ASCII码(字符串)转换为 压缩 BCD 码数组 参数: pAscii:转换前的 ASCII码(字符串) pBcd:转换后的 压缩 BCD 码数组 注意:此处代转换的 ASCII码(字符串)长度为偶数 ***************************/ void AsciiArrayToBcdArray(uint8_t *pBcd, uint8_t *pAscii, uint8_t len) { uint8_t i; for(i = 0; i < len; i++) { *pBcd = (*pAscii++ - '0') << 4; *pBcd += (*pAscii++ - '0'); pBcd++; } }
-
10、将 压缩 BCD 码数组 转换为 ASCII码(字符串)
(举例 :压缩 BCD 码0x12 0x34 0x56 转为 ASCII码(字符串)‘123456’)/*************************** 函数名: BcdArrayToAsciiArray 功能描述: 将 压缩 BCD 码数组 转换为 ASCII码(字符串) 参数: pAscii:转换后的 ASCII码(字符串) pBcd:转换前的 压缩 BCD 码数组 ***************************/ void BcdArrayToAsciiArray(uint8_t *pAscii, uint8_t *pBcd, uint8_t len) { uint8_t i; for(i = 0; i < len; i++) { *pAscii++ = ((*pBcd >> 4) & 0x0f) + '0'; *pAscii++ = (*pBcd & 0x0f) + '0'; pBcd++; } }