【问题标题】:Converting hex value in char array to an integer value将char数组中的十六进制值转换为整数值
【发布时间】:2011-08-12 16:18:13
【问题描述】:

我有一个十六进制值存储在一个两字节数组中:

unsigned char hex[2] = {0x02, 0x00};

如何将其转换为十进制值?

【问题讨论】:

  • 这是那些夜晚中的一个……请尽我应得的冒犯。我不知道为什么,但决赛越接近,我在“思考”方面的失误就越多。出于某种原因,我在想还有更多的东西。我坚信它要复杂得多......
  • @Mitch Wheat:别担心。你的评论实际上让我停顿了一下,意识到我确实知道我的问题的答案。当我接近开始我的鸡舍时,我发现自己害怕犯这样的错误并且看起来相当愚蠢。提醒一下,犯错和/或不记得头顶上的某些事情注定会发生,而不是世界末日,这可能是件好事。

标签: c hex arrays


【解决方案1】:

这不是一种有效的方法,至少我不认为它是有效的,但无论数组大小如何,它都可以在所有情况下工作,并且很容易转换为 b。

__int8 p[] = {1, 1, 1, 1, 1}; //Let's say this was the array used.
int value = sizeof(p); //Just something to store the length.
memcpy(&value, &p, value > 4 ? 4 : value); //It's okay to go over 4, but might as well limit it.

在上面的例子中,变量“value”的值为 16,843,009。这相当于如果您执行了以下操作。

int value = p[0] | p[1] << 0x8 | p[2] << 0x10 | p[3] << 0x18;

【讨论】:

    【解决方案2】:

    你可以使用(按位运算)

    int b = (hex[0] &lt;&lt; 8) | hex[1];

    或(简单数学)

    int b = (hex[0] * 0x100) + hex[1];

    【讨论】:

      【解决方案3】:

      取决于字节序,但是像这样?

      short value = (hex[0] << 16) & hex[1];
      

      【讨论】:

      • 取决于你拥有什么样的印度人”部分是正确的。
      • 这不正确的一些原因:首先,您将第一个字符移动 16 位而不是 8 位。一个字符通常是 8 位。其次,您要对这两个部分进行 AND 运算,您需要对它们进行 OR 运算。通过将 hex[0] 移位,您会将前 16 位保留为零,并且当与 hex[1] 进行与运算时,您将有效地删除 hex[1]。 (因为零和总是零)感谢您的输入!
      猜你喜欢
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 2016-03-24
      • 2018-11-28
      • 2011-05-25
      • 2015-06-04
      相关资源
      最近更新 更多