将2个字节的字符串(文本)表示形式转换为Integer

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将2个字节的字符串(文本)表示形式转换为Integer相关的知识,希望对你有一定的参考价值。

我有一个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

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

答案

你可能想要这个:

#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);
}
另一答案

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

#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
", item1[i]);
  }

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

输出:

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

以上是关于将2个字节的字符串(文本)表示形式转换为Integer的主要内容,如果未能解决你的问题,请参考以下文章

在python中将字节转换为位

php中字符与字节的区别

字符串与bytes

Python基础

将 post.get('href') 转换为文本或字符串形式,Excel 无法处理超过 255 个字符的超链接

如何在socks5代理中以2个字节的形式返回端口号到客户端?