Конвертировать 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, Ваши вычисления в лучшем случае странные.

Другие вопросы по тегам