【问题标题】:Conver string (text) representation of 2 bytes to Integer将 2 个字节的字符串(文本)表示形式转换为整数
【发布时间】:2018-03-04 16:26:41
【问题描述】:

我有 4 个文本表示的字节,我需要将其分成 2 个字节(HI 和 LO 字节)并将其转换为两个整数。

我如何在纯 C 中做到这一点?

0x4b 0xab 0x14 0x9d

我的意思是它们看起来像“0x4b”而不是 0x4b。

我已经将那些字符串拆分成 char 数组,表示如下:

item[0] = "0x4b";
item[1] = "0xab";
item[2] = "0x14";
item[3] = "0x9d";

现在完成应该是这样的:

0x4b 0xab - one integer
0x14 0x9d - second integer

如何在纯 C 中做到这一点?

【问题讨论】:

  • 到目前为止您尝试过什么?究竟是什么问题?
  • 您可能正在寻找strtol
  • 你写 "0x4b 0xab - 一个整数"。这究竟是什么意思?我在那里看到两个整数。你想得到这个整数吗:0x4bab
  • 我已经能够从 UART /proc 模块中恢复这些值,但我无法“找到一种方法”来改变它。通过文本搜索“0x”删除看起来不是一个好选择。

标签: c integer byte


【解决方案1】:

你可能想要这个:

#include <stdlib.h>
#include <stdio.h>

int main()
{
  char *item[4];
  item[0] = "0x4b";
  item[1] = "0xab";
  item[2] = "0x14";
  item[3] = "0x9d";

  int value1 = (strtol(item[0], NULL, 0) << 8) | strtol(item[1], NULL, 0);
  int value2 = (strtol(item[2], NULL, 0) << 8) | strtol(item[3], NULL, 0);

  printf("%x %x", value1, value2);
}

【讨论】:

  • 这很好,很紧凑!我支持投票。
  • 谢谢。像魅力一样工作。
【解决方案2】:

如果您需要中间结果,这是另一种方法:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (void)
{
  int item1[4];
  int item2[2];
  char *item[4];

  item[0] = "0x4b";
  item[1] = "0xab";
  item[2] = "0x14";
  item[3] = "0x9d";

  for (int i = 0; i < 4; i++)
  {
     item1[i] = strtol ( item[i], NULL, 0  ) ;
     printf("%2X\n", item1[i]);
  }

  for (int i = 0; i < 2; i++)
  {
      item2[2*i] = (item1[2*i] << 8) | item1[2*i+1]; 
      printf("Received integers: %2X\n", item2[2*i]);
  }
  return 0; 
}

输出:

4B                                                                                                                                 
AB                                                                                                                                 
14                                                                                                                                 
9D                                                                                                                                 
Received integers: 4BAB                                                                                                            
Received integers: 149D   

【讨论】:

    猜你喜欢
    • 2012-01-06
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 2019-04-16
    相关资源
    最近更新 更多