/** ******************************************************************************
* @file String.c
* @author 度云未来 DOIOT
* @brief 针对公司模块AT指令的处理库
******************************************************************************
* @attention
*
© Copyright (c) 2019 成都度云未来
* All rights reserved.
* 注意:本程序针对cubemx 生成的hal库程序快速开发
* 环境:keil5.0
* STM32Cube FW_F1 V1.8.0
********************************************************************************/
typedef struct{
uint8_t (*Hex_str)(char *ascii_str,char hex_str[]);
uint8_t (*char_2_hex)(char c1,char c2);
uint8_t (*char_2_dec)(char c1,char c2);
uint16_t (*dec_arry)(char ascii_str[],uint8_t dex_arry[]);
uint16_t (*hex_arry)(char ascii_str[],uint8_t hex_arry[]);
uint8_t (*R_CUT)(char *str,char buff[],uint8_t len);
uint8_t (*L_CUT)(char *str,char buff[],uint8_t len);
}TO;
typedef struct{
uint8_t (*Hex_Str)(uint8_t ascii_str[]);
uint8_t (*Ascii_Str)(uint8_t ascii_str[]);
uint16_t (*dec_arry)(uint8_t ascii_str[]);
uint16_t (*hex_arry)(uint8_t ascii_str[]);
uint8_t (*R_CUT)(char *str,uint8_t len);
uint8_t (*L_CUT)(char *str,uint8_t len);
uint8_t (*L_Shift)(char *str,uint8_t len);
}Convert;
typedef struct{
uint8_t (*hexStr)(uint8_t arry[],char hex_str[],uint16_t len);
uint8_t (*decStr)(uint8_t arry[],char dec_str[],uint16_t len);
uint8_t (*asciiStr)(uint8_t arry[],char dec_str[],uint16_t len);
uint8_t (*R_CUT)(uint8_t arry[],uint8_t arry_len,uint8_t cut_len);
uint8_t (*L_CUT)(uint8_t arry[],uint8_t arry_len,uint8_t len);
}Array;
typedef struct
{
int a;
}_AT;
typedef struct{
TO to;
Convert convert;
}STR;
void STR_init(STR * st);
void Array_init(Array *ar);
extern STR Str;
extern Array array;
/**@brief AsciiStr_2_HexStr : string 按ascii理解,单个单个的转变成 hex 字符串
* @param ascii_str : 字符串或数组,是数组的情况下需要保证有结束位
* @param hex_str : 生成的新字符串
* 例子: "stm32f103" "73746D33326631"
*/
uint8_t AsciiStr_2_HexStr(char *ascii_str,char hex_str[]);
/**@brief str_2_dec_arry:【string 数据按10进制理解,两两转化成 8位数组 arry】
* @param ascii_str : 字符串或数组,导入后自身会被转化成hex的字符串
* return 会返回长度
* 例子: char s[]="32323232" ---> uint8_t arry={32,32,32,32};
*/
uint16_t str_2_dec_arry(char ascii_str[],uint8_t dex_arry[]);
/**@brief str_2_hex_arry:【string 数据按10进制理解,两两转化成 8位数组 arry】
* @param ascii_str : 字符串或数组,导入后自身会被转化成hex的字符串
* return 会返回长度
* 例子: char s[]="32323232" ---> uint8_t arry={0x32,0x32,0x32,0x32};
*/
uint16_t str_2_hex_arry(char ascii_str[],uint8_t hex_arry[]);
/**@brief char_2_hex:两个字符按16进制理解转换成一个十六进制,return返回
* 例子: char c1='1' char c2='1' uint8_t a=11;
*/
uint8_t char_2_hex(char c1,char c2);
/**@brief char_2_dec两个字符按10进制理解转换成一个十进制,return返回
* 例子: char c1='1' char c2='1' uint8_t a=0x11;
*/
uint8_t char_2_dec(char c1,char c2);
/**@brief R_CUT:右靠裁剪len长至buff,str为原数据,之所以选择加一个buff是为了保护原数据
*/
uint8_t R_CUT(char *str,char buff[],uint8_t len);
/**@brief L_CUT:左靠裁剪len长至buff,str为原数据,之所以选择加一个buff是为了保护原数据
*/
uint8_t L_CUT(char *str,char buff[],uint8_t len);
/**@brief AsciiStr_convert_HexStr:ascii字符数组转hex字符数组
* @param ascii_str : 字符串或数组,导入后自身会被转化成hex的字符串
* 例子: "stm32f103" "73746D33326631"
*/
uint8_t AsciiStr_convert_HexStr(uint8_t ascii_str[]);
/**@brief str_2_dec_arry:【string 数据按10进制理解,两两转化成 8位数组 arry】
* @param ascii_str : 字符串或数组,导入后自身会被转化成hex的字符串
* return 会返回长度
* 例子: char s[]="32323232" ---> uint8_t arry={32,32,32,32};
*/
uint16_t str_convert_dec_arry(uint8_t ascii_str[]);
/**@brief str_2_hex_arry:【string 数据按10进制理解,两两转化成 8位数组 arry】
* @param ascii_str : 字符串或数组,导入后自身会被转化成hex的字符串
* return 会返回长度
* 例子: char s[]="32323232" ---> uint8_t arry={0x32,0x32,0x32,0x32};
*/
uint16_t str_convert_hex_arry(uint8_t ascii_str[]);
/**@brief AsciiStr_convert_HexStr:ascii字符数组转hex字符数组
* @param ascii_str : 字符串或数组,导入后自身会被转化成hex的字符串
* 例子: "73746D33326631" "stm32f103"
*/
uint8_t HexStr_convert_AsciiStr(uint8_t ascii_str[]);
/**@brief R_CUT:右靠裁剪len长至buff,直接改变原数据
*/
uint8_t Convert_R_CUT(char *str,uint8_t len);
/**@brief L_CUT:左靠裁剪len长至buff,直接改变原数据
*/
uint8_t Convert_L_CUT(char *str,uint8_t len);
/**@brief Shift_left:字符串左移,直接改变原数据
*/
uint8_t Shift_left(char *str,uint8_t len);
/*----------------------------------------------------------------------------------*/
/**@brief Arry_2_hexstr : 8位数组按数据理解转换成16进制表示的字符串
* @param arry : 输入数组
* @param hex_str : 生成的字符串
* 例子: uint8_t arry={0x32,0x32,0x32,0x32}; ---> "32323232"
*/
uint8_t Arry_2_hexstr(uint8_t arry[],char hex_str[],uint16_t len);
/**@brief Arry_2_decstr : 8位数组按数据理解转换成16进制表示的字符串
* @param arry : 输入数组
* @param hex_str : 生成的字符串
* 例子: uint8_t arry={0x32,0x32,0x32,0x32}; ---> "32323232"
*/
uint8_t Arry_2_decstr(uint8_t arry[],char dec_str[],uint16_t len);
/**@brief Arry_2_AsciiStr : 8位数组按ascii理解转换成16进制表示的字符串
* @param arry : 输入数组
* @param hex_str : 生成的字符串
* 例子: uint8_t arry={0x32,0x32,0x32,0x32}; ---> "2222"
*/
uint8_t Arry_2_AsciiStr(uint8_t arry[],char dec_str[],uint16_t len);
/**@brief R_CUT:右靠裁剪len长至buff,
*/
uint8_t Arry_R_CUT(uint8_t arry[],uint8_t arry_len,uint8_t cut_len);
/**@brief L_CUT:左靠裁剪len长至buff,
*/
uint8_t Arry_L_CUT(uint8_t arry[],uint8_t arry_len,uint8_t len);