文件最后提交记录最后更新时间
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
11 个月前
README.md

lib_bsprintf

This function is mainly used to output the contents of the input structure. Supports standard formats for printf and scanf. For detailed parameters, see:

  1. https://en.cppreference.com/w/c/io/fprintf
  2. https://en.cppreference.com/w/c/io/fscanf
  • special:
    1. Float use %hf, "%f" or "%lf" is double, "%Lf" is long double.
    2. The char array is specified with %.xs. for example: "char t[30]" is specified with "%.30s", char a [20] - " %.20s "
    3. "%u" is unsigned int.
    4. "%d" is int.
    5. When using %f to format a double data type, the double is truncated to 6 decimal places by default.
    6. It is recommended that the "char[]" array be placed at the end of the structure to prevent parameter configuration errors such as "%.20s" from causing problems in parsing the entire buffer.
  • demo
    1. struct:
    begin_packed_struct
    struct test
    {
      uint8_t a;
      uint16_t b;
      uint32_t c;
      int8_t d;
      int16_t e;
      int32_t f;
      float g;
      double h;
      char i[32];
      uint64_t j;
      int64_t k;
      char l;
      unsigned char m;
      short int n;
      unsigned short int o;
      int p;
      unsigned int q;
      long r;
      unsigned long s;
      long long t;
      unsigned long long u;
      size_t v;
      long double w;
    }end_packed_struct;
    
    1. format string:
    const char* sg = "           uint8_t:[%hhu]\n" \
                     "          uint16_t:[%hu]\n" \
                     "          uint32_t:[%u]\n" \
                     "            int8_t:[%hhd]\n" \
                     "           int16_t:[%hd]\n" \
                     "           int32_t:[%d]\n" \
                     "             float:[%hf]\n" \
                     "            double:[%f]\n" \
                     "            char[]:[%.32s]\n" \
                     "          uint64_t:[%lu]\n" \
                     "           int64_t:[%ld]\n" \
                     "              char:[%hhd]\n" \
                     "     unsigned char:[%hhu]\n" \
                     "         short int:[%hd]\n" \
                     "unsigned short int:[%hu]\n" \
                     "               int:[%d]\n" \
                     "      unsigned int:[%u]\n" \
                     "              long:[%ld]\n" \
                     "     unsigned long:[%lu]\n" \
                     "         long long:[%lld]\n" \
                     "unsigned long long:[%llu]\n" \
                     "            size_t:[%uz]\n" \
                     "       long double:[%Lf]\n";
    
    1. use:
    • output to terminal:
    #ifdef CONFIG_FILE_STREAM
     struct lib_stdoutstream_s stdoutstream;
    
     lib_stdoutstream(&stdoutstream, stdout);
    
     flockfile(stdout);
     lib_bsprintf(&stdoutstream.common, sv, &test_v);
     lib_bsprintf(&stdoutstream.common, sg, &test_g);
     funlockfile(stdout);
    #else
     struct lib_rawoutstream_s rawoutstream;
     struct lib_bufferedoutstream_s outstream;
    
     lib_rawoutstream(&rawoutstream, STDOUT_FILENO);
     lib_bufferedoutstream(&outstream, &rawoutstream.common);
    
     lib_bsprintf(&outstream.common, sv, &test_v);
     lib_bsprintf(&outstream.common, sg, &test_g);
    
     lib_stream_flush(&outstream.common);
    #endif
    

lib_bscanf

This function adds a formatted standard scanf string to the structure(lib_bscanf).

  1. https://zh.cppreference.com/w/c/io/fscanf
  • special:

    1. Please use %lf for double precision, "%hf" or "%f" for float, long double ("%Lf") is not supported.
    2. Please use %hhd or %hhu for a single char or unsigned char.
    3. Use %hd or %hu for short int or unsigned short int.
    4. When using %s or %c, please specify the length of the char array, such as %32s, %32c.
    5. %s will check the string for spaces. When there are spaces in the string, it will be truncated. If you want to use string with spaces, please use %{length}c, but make sure that the length of the string can fill the array, otherwise an error will occur.
    6. %[] collection and %n are not supported.
  • demo

    1. struct: Same as above
    2. format string:
    #define TOSTR(str)   #str
    #define TONNAME(name) TOSTR(name)
    
    #define v_uint8_t    97
    #define v_uint16_t   19299
    #define v_uint32_t   22155
    
    ......
    
    #define v_l_double   -9299.9299929912122464755474
    
    char bflag[] = "%hhu%hu%u%hhd%hd%d%f%lf%32s%llu%lld%hhd%hhu%hd%hu%d%u%ld%lu%lld%llu%zu%ld";
    
    char binput[] = TONNAME(v_uint8_t) \
                   " " TONNAME(v_uint16_t) \
                   " " TONNAME(v_uint32_t) \
                   " " TONNAME(v_int8_t) \
                   " " TONNAME(v_int16_t) \
                   " " TONNAME(v_int32_t) \
                   " " TONNAME(v_float) \
                   " " TONNAME(v_double) \
                   " " TONNAME(v_char_arr) \
                   " " TONNAME(v_uint64_t) \
                   " " TONNAME(v_int64_t) \
                   " " TONNAME(v_char) \
                   " " TONNAME(v_u_char) \
                   " " TONNAME(v_s_int) \
                   " " TONNAME(v_u_s_int) \
                   " " TONNAME(v_int) \
                   " " TONNAME(v_u_int) \
                   " " TONNAME(v_long) \
                   " " TONNAME(v_u_long) \
                   " " TONNAME(v_l_l) \
                   " " TONNAME(v_u_l_l) \
                   " " TONNAME(v_size_t) \
                   " " TONNAME(v_l_double);
    
    1. use:
    struct test vg;
    ret = lib_bscanf(binput, bflag, &vg);