Как сделать битовую маску из символа? - PullRequest
0 голосов
/ 08 января 2019

У меня есть символ value = "ab", как его преобразовать, чтобы получить следующую битовую маску int mask = 0xab? Можно ли сделать int mask = 0x(value) или что-то в этом роде.

Ответы [ 3 ]

0 голосов
/ 08 января 2019

Полагаю, вы хотите это:

Из вашего комментария 3 символа, считанные с COM-порта 0 1 b8, должны быть преобразованы в число 0x1b8.

Предположим, это:

int c1 = 0;
int c2 = 0x1;
int c3 = 0xb8;

Тогда желаемое число можно получить так:

int numberyouwant = (c1 << 16) | (c2 << 8) | c3;
0 голосов
/ 08 января 2019

Вы, вероятно, хотите это:

#include <stdio.h>
#include <string.h>

int main() {
  char buffer[] = "ab" ;
  int x = strtol(buffer, NULL, 16);
  printf("x in hexadecimal = %x\nx in decimal = %d\n", x, x);
  return 0;
}

Или немного сложнее, если вы просто хотите выбрать 2 символа в середине строки:

#include <stdio.h>
#include <string.h>

int main() {
  char buffer[] = "ab12345" ;
  char tempbuffer[3];
  tempbuffer[0] = buffer[0];
  tempbuffer[1] = buffer[1];
  tempbuffer[2] = 0;
  int x = strtol(tempbuffer, NULL, 16);
  printf("x in hexadecimal = %x\nx in decimal = %d\n", x, x);

  return 0;
}
0 голосов
/ 08 января 2019

'ab' - константа, состоящая из нескольких символов. Что именно он делает, так это определением реализации, поэтому он не даст вам одинаковых результатов в разных компиляторах. Там нет никакой гарантии, что результат имеет смысл в любом случае. Что вы, вероятно, хотели, это:

const unsigned char *a = "ab";

Теперь это строковый литерал, и вы берете его адрес и присваиваете ему указатель. Вы можете сделать разделение так:

char b = a[0];
char c = a[1];
...