【问题标题】:how to split a string into 2 bytes by 2 bytes如何将字符串拆分为 2 个字节乘以 2 个字节
【发布时间】:2021-10-08 15:56:24
【问题描述】:

如何将字符串拆分为 2 个字节乘以 2 个字节。我想从字符串中获取时间信息作为整数值。

char buffer[10]= "101507";

int hour = < 10
int min = < 15
int sec = < 07

【问题讨论】:

  • 您可以实施其中的哪些部分,您需要哪些帮助?

标签: c string split


【解决方案1】:

您可以使用sscanf() function,为您的三个变量中的每一个指定字段宽度为2

#include <stdio.h>

int main()
{
    char buffer[10] = "101507";
    int hour, min, sec;
    if (sscanf(buffer, "%2d%2d%2d", &hour, &min, &sec) != 3) {
        printf("Error reading data\n");
    }
    else {
        printf("Hour = %02d, Min = %02d, Sec = %02d\n", hour, min, sec);
    }
    return 0;
}

【讨论】:

  • 不错的解决方案,简洁 +1
【解决方案2】:

您可以直接对单个字符进行计算。只需减去'0' 即可得到数值。喜欢

char buffer[10]= "101507";

int hour = 10 * (buffer[0] - '0') + (buffer[1] - '0');
int min =  10 * (buffer[2] - '0') + (buffer[3] - '0');
int sec =  10 * (buffer[4] - '0') + (buffer[5] - '0');

或者写一个简单的函数,接受两个字符作为参数

int chars_to_int(char msd, char lsd)
{
    return 10 * (msd - '0') + (lsd - '0');
}


char buffer[10]= "101507";

int hour = chars_to_int(buffer[0], buffer[1]);
int min =  chars_to_int(buffer[2], buffer[3]);
int sec =  chars_to_int(buffer[4], buffer[5]);

或编写一个以 char 指针为参数的简单函数

int chars_to_int(char* p)
{
    return 10 * (p[0] - '0') + (p[1] - '0');
}


char buffer[10]= "101507";

int hour = chars_to_int(&buffer[0]);
int min =  chars_to_int(&buffer[2]);
int sec =  chars_to_int(&buffer[4]);

【讨论】:

    【解决方案3】:
    #include <stdio.h>
    
    #define BARF(m) fprintf(stderr,"Barf: %s\n", m)
    
    int main(int argc, char **argv)
    {
    unsigned val;
    char *str = argv[1] ? argv[1] :"101507";
    int hh,mm,ss;
    
    for(val=0; *str; str++) {
            if (*str < '0' || *str > '9') {BARF(str); continue;}
            val *= 10; val += (*str - '0');
            }
    
    ss = val % 100; val /= 100;
    mm = val % 100; val /= 100;
    hh = val % 100;
    
    printf("%02d:%02d:%02d\n", hh, mm, ss);
    
    return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      • 2018-09-10
      • 2011-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多