string_fuc.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. /** ******************************************************************************
  2. * @file String.c
  3. * @author 度云未来 DOIOT
  4. * @brief 针对公司模块AT指令的处理库
  5. ******************************************************************************
  6. * @attention
  7. * <h2><center>&copy; Copyright (c) 2019 成都度云未来
  8. * All rights reserved.</center></h2>
  9. * 注意:本程序针对cubemx 生成的hal库程序快速开发
  10. * 环境:keil5.0
  11. * STM32Cube FW_F1 V1.8.0
  12. ********************************************************************************/
  13. typedef struct{
  14. uint8_t (*Hex_str)(char *ascii_str,char hex_str[]);
  15. uint8_t (*char_2_hex)(char c1,char c2);
  16. uint8_t (*char_2_dec)(char c1,char c2);
  17. uint16_t (*dec_arry)(char ascii_str[],uint8_t dex_arry[]);
  18. uint16_t (*hex_arry)(char ascii_str[],uint8_t hex_arry[]);
  19. uint8_t (*R_CUT)(char *str,char buff[],uint8_t len);
  20. uint8_t (*L_CUT)(char *str,char buff[],uint8_t len);
  21. }TO;
  22. typedef struct{
  23. uint8_t (*Hex_Str)(uint8_t ascii_str[]);
  24. uint8_t (*Ascii_Str)(uint8_t ascii_str[]);
  25. uint16_t (*dec_arry)(uint8_t ascii_str[]);
  26. uint16_t (*hex_arry)(uint8_t ascii_str[]);
  27. uint8_t (*R_CUT)(char *str,uint8_t len);
  28. uint8_t (*L_CUT)(char *str,uint8_t len);
  29. uint8_t (*L_Shift)(char *str,uint8_t len);
  30. }Convert;
  31. typedef struct{
  32. uint8_t (*hexStr)(uint8_t arry[],char hex_str[],uint16_t len);
  33. uint8_t (*decStr)(uint8_t arry[],char dec_str[],uint16_t len);
  34. uint8_t (*asciiStr)(uint8_t arry[],char dec_str[],uint16_t len);
  35. uint8_t (*R_CUT)(uint8_t arry[],uint8_t arry_len,uint8_t cut_len);
  36. uint8_t (*L_CUT)(uint8_t arry[],uint8_t arry_len,uint8_t len);
  37. }Array;
  38. typedef struct
  39. {
  40. int a;
  41. }_AT;
  42. typedef struct{
  43. TO to;
  44. Convert convert;
  45. }STR;
  46. void STR_init(STR * st);
  47. void Array_init(Array *ar);
  48. extern STR Str;
  49. extern Array array;
  50. /**@brief AsciiStr_2_HexStr : string 按ascii理解,单个单个的转变成 hex 字符串
  51. * @param ascii_str : 字符串或数组,是数组的情况下需要保证有结束位
  52. * @param hex_str : 生成的新字符串
  53. * 例子: "stm32f103" "73746D33326631"
  54. */
  55. uint8_t AsciiStr_2_HexStr(char *ascii_str,char hex_str[]);
  56. /**@brief str_2_dec_arry:【string 数据按10进制理解,两两转化成 8位数组 arry】
  57. * @param ascii_str : 字符串或数组,导入后自身会被转化成hex的字符串
  58. * return 会返回长度
  59. * 例子: char s[]="32323232" ---> uint8_t arry={32,32,32,32};
  60. */
  61. uint16_t str_2_dec_arry(char ascii_str[],uint8_t dex_arry[]);
  62. /**@brief str_2_hex_arry:【string 数据按10进制理解,两两转化成 8位数组 arry】
  63. * @param ascii_str : 字符串或数组,导入后自身会被转化成hex的字符串
  64. * return 会返回长度
  65. * 例子: char s[]="32323232" ---> uint8_t arry={0x32,0x32,0x32,0x32};
  66. */
  67. uint16_t str_2_hex_arry(char ascii_str[],uint8_t hex_arry[]);
  68. /**@brief char_2_hex:两个字符按16进制理解转换成一个十六进制,return返回
  69. * 例子: char c1='1' char c2='1' uint8_t a=11;
  70. */
  71. uint8_t char_2_hex(char c1,char c2);
  72. /**@brief char_2_dec两个字符按10进制理解转换成一个十进制,return返回
  73. * 例子: char c1='1' char c2='1' uint8_t a=0x11;
  74. */
  75. uint8_t char_2_dec(char c1,char c2);
  76. /**@brief R_CUT:右靠裁剪len长至buff,str为原数据,之所以选择加一个buff是为了保护原数据
  77. */
  78. uint8_t R_CUT(char *str,char buff[],uint8_t len);
  79. /**@brief L_CUT:左靠裁剪len长至buff,str为原数据,之所以选择加一个buff是为了保护原数据
  80. */
  81. uint8_t L_CUT(char *str,char buff[],uint8_t len);
  82. /**@brief AsciiStr_convert_HexStr:ascii字符数组转hex字符数组
  83. * @param ascii_str : 字符串或数组,导入后自身会被转化成hex的字符串
  84. * 例子: "stm32f103" "73746D33326631"
  85. */
  86. uint8_t AsciiStr_convert_HexStr(uint8_t ascii_str[]);
  87. /**@brief str_2_dec_arry:【string 数据按10进制理解,两两转化成 8位数组 arry】
  88. * @param ascii_str : 字符串或数组,导入后自身会被转化成hex的字符串
  89. * return 会返回长度
  90. * 例子: char s[]="32323232" ---> uint8_t arry={32,32,32,32};
  91. */
  92. uint16_t str_convert_dec_arry(uint8_t ascii_str[]);
  93. /**@brief str_2_hex_arry:【string 数据按10进制理解,两两转化成 8位数组 arry】
  94. * @param ascii_str : 字符串或数组,导入后自身会被转化成hex的字符串
  95. * return 会返回长度
  96. * 例子: char s[]="32323232" ---> uint8_t arry={0x32,0x32,0x32,0x32};
  97. */
  98. uint16_t str_convert_hex_arry(uint8_t ascii_str[]);
  99. /**@brief AsciiStr_convert_HexStr:ascii字符数组转hex字符数组
  100. * @param ascii_str : 字符串或数组,导入后自身会被转化成hex的字符串
  101. * 例子: "73746D33326631" "stm32f103"
  102. */
  103. uint8_t HexStr_convert_AsciiStr(uint8_t ascii_str[]);
  104. /**@brief R_CUT:右靠裁剪len长至buff,直接改变原数据
  105. */
  106. uint8_t Convert_R_CUT(char *str,uint8_t len);
  107. /**@brief L_CUT:左靠裁剪len长至buff,直接改变原数据
  108. */
  109. uint8_t Convert_L_CUT(char *str,uint8_t len);
  110. /**@brief Shift_left:字符串左移,直接改变原数据
  111. */
  112. uint8_t Shift_left(char *str,uint8_t len);
  113. /*----------------------------------------------------------------------------------*/
  114. /**@brief Arry_2_hexstr : 8位数组按数据理解转换成16进制表示的字符串
  115. * @param arry : 输入数组
  116. * @param hex_str : 生成的字符串
  117. * 例子: uint8_t arry={0x32,0x32,0x32,0x32}; ---> "32323232"
  118. */
  119. uint8_t Arry_2_hexstr(uint8_t arry[],char hex_str[],uint16_t len);
  120. /**@brief Arry_2_decstr : 8位数组按数据理解转换成16进制表示的字符串
  121. * @param arry : 输入数组
  122. * @param hex_str : 生成的字符串
  123. * 例子: uint8_t arry={0x32,0x32,0x32,0x32}; ---> "32323232"
  124. */
  125. uint8_t Arry_2_decstr(uint8_t arry[],char dec_str[],uint16_t len);
  126. /**@brief Arry_2_AsciiStr : 8位数组按ascii理解转换成16进制表示的字符串
  127. * @param arry : 输入数组
  128. * @param hex_str : 生成的字符串
  129. * 例子: uint8_t arry={0x32,0x32,0x32,0x32}; ---> "2222"
  130. */
  131. uint8_t Arry_2_AsciiStr(uint8_t arry[],char dec_str[],uint16_t len);
  132. /**@brief R_CUT:右靠裁剪len长至buff,
  133. */
  134. uint8_t Arry_R_CUT(uint8_t arry[],uint8_t arry_len,uint8_t cut_len);
  135. /**@brief L_CUT:左靠裁剪len长至buff,
  136. */
  137. uint8_t Arry_L_CUT(uint8_t arry[],uint8_t arry_len,uint8_t len);