【问题标题】:Convert 2 char into 1 int [closed]将 2 char 转换为 1 int [关闭]
【发布时间】:2012-12-16 01:21:37
【问题描述】:

我有 2 个字符:HIGH 和 LOW,我想将它们转换为对应于 HIGH + LOW 的 2 个左位的 int。

我试过类似的东西:

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));

【问题讨论】:

  • char *HIGH; char *LOW; 去掉星号。
  • 结果 = (HIGH
  • 你知道C有bitwise operators吗?
  • @ATaylor,这不是 OP 试图做的操作,但我猜你是在正确的轨道上。
  • @CarlNorum 是的,我知道,这就是为什么它是评论,而不是答案。但这就是我喜欢做的事情,当我想将两个字符转换为整数时。

标签: c casting char int


【解决方案1】:

您将HIGHLOW 声明为char*,但您没有将它们用作指针。以下代码可以正常工作(顺便说一句,不使用常量时避免使用大写标识符):

char high = 125;
char low = 12;

我是这样理解你的问题的(可能更容易理解):

#include <limits.h>

int result = high + (low >> (CHAR_BIT - 2));

【讨论】:

  • 如果我理解正确,如果 high = 100 and low = 128 那么结果 = 100 + 2。我说的对吗?
  • @Leo:是的,你是。 (顺便说一句,char 可以被签名并且可能无法保存值 128。使用而不是 unsigned char 来做到这一点。)
【解决方案2】:

我有 2 个字符,HIGH 和 LOW,我想将它们转换为 int,对应于 HIGH + LOW 的 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。你的计算充其量是奇怪的。

【讨论】:

    猜你喜欢
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多