比较char数组的两个值

时间:2011-09-14 16:30:04

标签: c char

我在C编程,我有一个字母数组充满字母/数字。我想将前两个值一起比较为一个数字或组合。

char values[8];
//a value of this might be 245756
switch (values[0 and 1]){
   case 24:
     do something;
   case 45:
     do something else;
}

我是否必须连接或者如果我想将这两个值组合起来然后看看它们是否等于某些组合?

谢谢!

如果我不清楚,请告诉我。

5 个答案:

答案 0 :(得分:1)

switch ((values[0] - '0') * 10 + (values[1] - '0')]){

答案 1 :(得分:1)

我假设您的char数组包含字符'2''4'等。

在这种情况下,您可以将字符转换为其等效的整数值,如下所示:

char x = '2';
int  y = x - '0';

所以你需要做的就是为values[0]values[1]中的每一个执行此计算,然后执行基数为10的数学运算,将它们组合成一个整数值。

如果你的char数组已经包含每个数字的整数值,那么你当然可以跳过转换,直接跳到基数为10的数学。

答案 2 :(得分:1)

您可以根据以下表达式进行切换:

(values[0]-'0')*10 + values[1]-'0'

答案 3 :(得分:0)

执行此操作的一种方法是将数组转换为uint16_t指针并取消引用它(有些人可能原则上不赞成这个)。但是,您必须确定组合形成的数字(作为两个字节的int)来设置您的案例值。例如,

switch (*(uint16_t *)values) {
    case 0x4131: {    /* "1A" on little-endian systems */
  ...

另一种方法是从简单表达式中的两个字符形成一个int并打开它。

switch( ((int)values[0] << 8) | (int)values[1] ) {
    case ('1' << 8) | 'A': {
  ...

('1' << 8) | 'A'可以case,因为它可以在编译时进行评估。

答案 4 :(得分:-1)

char values[8]="0123456";
switch ( (values[2]=0,atoi(values)) ){
   case 24:
     do something;
   case 45:
     do something else;
}

应该有效