首页 > 代码库 > C语言数据转换(hex - char - byte array - acsii)
C语言数据转换(hex - char - byte array - acsii)
网上的整理过来的,来源记不清了,感谢作者。
DataConvert.c
#include <stdio.h>#include <string.h>#include "DataConvert.h"int strToHex(char *ch, char *hex){ int high,low; int tmp = 0; if(ch == NULL || hex == NULL){ return -1; } if(strlen(ch) == 0){ return -2; } while(*ch){ tmp = (int)*ch; high = tmp >> 4; low = tmp & 15; *hex++ = valueToHexCh(high); //先写高字节 *hex++ = valueToHexCh(low); //其次写低字节 ch++; } *hex = ‘\0‘; return 0;}int hexToStr(char *hex, char *ch){ int high,low; int tmp = 0; if(hex == NULL || ch == NULL){ return -1; } if(strlen(hex) %2 == 1){ return -2; } while(*hex){ high = hexCharToValue(*hex); if(high < 0){ *ch = ‘\0‘; return -3; } hex++; //指针移动到下一个字符上 low = hexCharToValue(*hex); if(low < 0){ *ch = ‘\0‘; return -3; } tmp = (high << 4) + low; *ch++ = (char)tmp; hex++; } *ch = ‘\0‘; return 0;}int hexCharToValue(const char ch){ int result = 0; //获取16进制的高字节位数据 if(ch >= ‘0‘ && ch <= ‘9‘){ result = (int)(ch - ‘0‘); } else if(ch >= ‘a‘ && ch <= ‘z‘){ result = (int)(ch - ‘a‘) + 10; } else if(ch >= ‘A‘ && ch <= ‘Z‘){ result = (int)(ch - ‘A‘) + 10; } else{ result = -1; } return result;}char valueToHexCh(const int value){ char result = ‘\0‘; if(value >= 0 && value <= 9){ result = (char)(value + 48); //48为ascii编码的‘0’字符编码值 } else if(value >= 10 && value <= 15){ result = (char)(value - 10 + 65); //减去10则找出其在16进制的偏移量,65为ascii的‘A‘的字符编码值 } else{ ; } return result;}int hexChartoByte(char *s,char *byte){ int i,n = 0; for(i = 0; s[i]; i += 2) { if(s[i] >= ‘A‘ && s[i] <= ‘F‘) byte[n] = s[i] - ‘A‘ + 10; else byte[n] = s[i] - ‘0‘; if(s[i + 1] >= ‘A‘ && s[i + 1] <= ‘F‘) byte[n] = (byte[n] << 4) | (s[i + 1] - ‘A‘ + 10); else byte[n] = (byte[n] << 4) | (s[i + 1] - ‘0‘); ++n; } return n;}unsigned char ChartoAscii(const unsigned char cha){ unsigned char ascii; if ((cha >= 0x0A) && (cha <= 0x0F)) { ascii = cha + ‘A‘ - 10; } else { ascii = cha + ‘0‘; } return ascii;}
DataConvert.h
#ifndef __DATA_H#define __DATA_Hint strToHex(char *ch, char *hex);int hexToStr(char *hex, char *ch);int hexCharToValue(const char ch);char valueToHexCh(const int value);int hexChartoByte(char *s,char *byte);unsigned char ChartoAscii(const unsigned char cha);#endif
main.c
#include <stdio.h>#include <string.h>#include "DataConvert.h"#define MCU_FIRWARE_VERSION "V1.0.0"#define BLE_FIRWARE_VERSION "V1.0.0"#define FONT_VERSION "V1.0.0"int main(int argc, char *argv[]){ int i; char result[1024]; char *p_result = result; //转换版本号数据 char mcu_version_hex[12]; char mcu_version_byte[6]; char *p_ch = MCU_FIRWARE_VERSION; char *p_hex = mcu_version_hex; strToHex(p_ch,p_hex); int n = hexChartoByte(mcu_version_hex,mcu_version_byte); char ble_version_hex[12]; char ble_version_byte[6]; p_ch = BLE_FIRWARE_VERSION; p_hex = ble_version_hex; strToHex(p_ch,p_hex); int m = hexChartoByte(ble_version_hex,ble_version_byte); char font_version_hex[12]; char font_version_byte[6]; p_ch = FONT_VERSION; p_hex = font_version_hex; strToHex(p_ch,p_hex); int k = hexChartoByte(font_version_hex,font_version_byte); //填充版本号数据 for(int i = 0;i<n;i++) printf ("%X ",0XFF & mcu_version_byte[i]); for(int i = 0;i<m;i++) printf ("%X ",0XFF & ble_version_byte[i]); for(int i = 0;i<k;i++) printf ("%X ",0XFF & font_version_byte[i]); hexToStr(p_hex, p_result); printf("the string is:%s\n", p_result);}
以上demo将字符串转换成utf8的字节流,可用utf8的转换工具还原成字符串验证。
------end
C语言数据转换(hex - char - byte array - acsii)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。