Сравните два значения массива char - PullRequest
1 голос
/ 14 сентября 2011

Я программирую на 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 ]

1 голос
/ 14 сентября 2011

Я предполагаю, что ваш массив char содержит символы '2', '4' и т. Д.

В этом случае вы можете преобразовать символ в его эквивалентное целое значение следующим образом:

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

Таким образом, все, что вам нужно сделать, - это выполнить вычисления для каждого из values[0] и values[1], а затем выполнить математические вычисления по основанию-10, чтобы объединить их в одно целое значение.

Если ваш массив char уже содержит целочисленное значение для каждой цифры, то вы, конечно, можете пропустить преобразование и сразу перейти к математике с базовыми 10.

1 голос
/ 14 сентября 2011

вы можете сделать переключение на основе следующего выражения:

(values[0]-'0')*10 + values[1]-'0'
1 голос
/ 14 сентября 2011
switch ((values[0] - '0') * 10 + (values[1] - '0')]){
0 голосов
/ 15 сентября 2011
char values[8]="0123456";
switch ( (values[2]=0,atoi(values)) ){
   case 24:
     do something;
   case 45:
     do something else;
}

должно работать

0 голосов
/ 14 сентября 2011

Один из способов сделать это - привести массив к указателю uint16_t и разыменовать его (хотя некоторые люди могут не одобрить это в принципе). Вы должны были бы определить, какие числа (как двухбайтовое целое) будут формироваться комбинации, чтобы установить значения вашего случая. Например,

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, поскольку его можно оценить во время компиляции.

...