用二进制值切换案例值?

时间:2012-08-10 15:19:35

标签: c

我正在做一个切换案例,其中案例值必须是二进制数字,如01,010,0100,0,00,000,,依此类推。

switch(Code)
{
          case 0:
               {
                   printf("A");
                   break;
                   }
          case 00:
               {
                   printf("B");
                   break;
                   }
          case 000:
               {
                   printf("C");
                   break;
}

我知道如果我输入000,它将被存储为0.我的问题是你如何输入000以便我可以获得printf("C")

3 个答案:

答案 0 :(得分:3)

我无法想象为什么你想要区分这些数字,因为在任何表示中它们都是相同的数字,但我想你必须将它们作为字符串来检查。 你不能把字符串放在C语言的switch语句中,所以你只需要有一系列if / else语句:

void selectString(char *input)
{
    if(strcmp(input, "0") == 0)
    {
        printf("A");
    }
    else if(strcmp(input, "00") == 0)
    {
        printf("B");
    }
    else if(strcmp(input, "000") == 0)
    {
        printf("C");
    }
}

话虽如此,你所要求的内容看起来非常像一个 XY问题,也就是说,你问的是如何做奇怪的事情,因为你认为你需要这样做来解决X.你想做什么?

答案 1 :(得分:3)

您的问题是您有一系列要尝试解码的位(线路上的信号)。但是你不知道你的信息包何时开始。你在编码中缺少的是一封信的开头。 (你也没有开头的话,我建议用一个未使用的数字来表示单词之间的空格。)

在你的程序中会建议为每个比特序列添加1个起始位(注意这实际上并没有传输,但由于没有任何传输的持续时间而暗示)。然后您的值为10,100和1000.您可以轻松地以二进制表示形式比较这些值。注意,最小的有效位系列是字母'e',它是10的二进制。单个1位不是有效值。只需看一眼Morse code entry here,就会看到字母表形成一个编号系统,可以存储在查找表中以便快速实现。

答案 2 :(得分:0)

鉴于你在变量中使用这个莫尔斯(我猜0 = Dot,1 =破折号)。 “代码”必须是字符串。

switch(Code)
{
    case "01":   //".-"
        printf("A");
        break;
    case "100":   //"-.."
        printf("B");
        break;
    case "0001":   //"...-"
        printf("V");
    break;
}