Конвертировать 2 символа в 1 int
У меня есть 2 символа: HIGH и LOW, и я хотел бы преобразовать их в целое число, соответствующее HIGH + 2 левых бита из LOW.
Я попробовал что-то вроде:
unsigned char high;
unsigned char low;
high = 128; // 10000000
low= 128; // 10000000
int result; (should be high 10000000 + 2 left bites of low 10 = 1000000010)
// To do
return result;
Отредактировано для большей наглядности.
Решение, которое я выбрал:
return high*4 + (low >> (CHAR_BIT - 2));
2 ответа
Вы заявляете HIGH
а также LOW
как char*
, но вы не используете их в качестве указателя. Следующий код работает нормально (кстати, избегайте использования заглавных букв, если вы не используете константы):
char high = 125;
char low = 12;
Вот как я понимаю ваш вопрос (это может быть более понятно):
#include <limits.h>
int result = high + (low >> (CHAR_BIT - 2));
У меня есть 2 символа, ВЫСОКИЙ и НИЗКИЙ, и я хотел бы преобразовать их в
int
соответствует HIGH + 2 левых бита от LOW.
Ваша спецификация не ясна. Дано:
unsigned char HIGH = 152;
unsigned char LOW = 12;
Это может означать:
int result = HIGH + (LOW >> 6); // Assuming CHAR_BIT == 8
Или это может означать:
int result = HIGH + (LOW & 0xC0);
Или это может означать:
int result = (HIGH << 2) | (LOW >> 6);
Или это может иметь какой-то другой смысл. Для значений, показанных в вопросе, первые два выражения дают одинаковый ответ.
Чтобы получить более содержательный ответ, вам нужно будет более тщательно изложить требования. Ваш реальный код практически не имеет никакого отношения к указанному вами требованию. У вас есть два char *
переменные; вы инициализируете их по почти наверняка недействительным адресам; вы не инициализируете result
, Ваши вычисления в лучшем случае странные.