我有2个字符:高,低,我想将它们转换为对应高一个int + 2左位从低。
我试着像somethine:
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;
编辑更加清晰。
我chosed解决的办法是:
return high*4 + (low >> (CHAR_BIT - 2));
您声明HIGH
和LOW
为char*
,但你不把它们作为指针。 下面的代码工作正常(顺便说一句,避免大写标识,当你不使用常量):
char high = 125;
char low = 12;
这就是我理解你的问题(也可能是更容易理解):
#include <limits.h>
int result = high + (low >> (CHAR_BIT - 2));
我有2个字符,高与低,我想将它们转换为一个int
对应高+ 2左位从低。
您的规格尚不清楚。 鉴于:
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
。 你的计算是,在最好的,奇怪的。