【问题标题】:Converting stored binary data to hex?将存储的二进制数据转换为十六进制?
【发布时间】:2022-01-22 20:48:19
【问题描述】:

char string[100] = "000000000000000000010000000000" 这是我拥有的数据,当我们拆分 string[100] 时,数据以 4 个单独的 8 位为单位 我们得到,00000000 00000000 00000100 00000000 谁能帮我用 C 语言把它转换成十六进制值?

对于上面的字符串,将其转换为十六进制后,我们需要得到“00 00 04 00”,所以同样基于输入,我需要得到所需的输出。

【问题讨论】:

  • 你至少需要一个循环。
  • 这不是二进制,它是一个表示二进制数的字符串。大不同。

标签: c string binary hex


【解决方案1】:

无需重新发明轮子,使用strtol即可。

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

int main (void)
{
  char string[100] = "000000000000000000010000000000";
  printf("%.8lx\n", strtol(string,0,2));
}

您需要将其分组为字节,中间有空格:

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

int main (void)
{
  char string[100] = "000000000000000000010000000000";
  char byte_str[100];
  sprintf(byte_str, "%.8lx\n", strtol(string,0,2));
  for(size_t i=0; i<strlen(byte_str); i+=2)
  {
    printf("%c%c ", byte_str[i], byte_str[i+1]);
  }
}

这可能不是最有效的代码,但确实花了我几分钟的时间来编写。

【讨论】:

    【解决方案2】:

    如果是学习如何在没有花哨的库函数的情况下将数字转换和拆分为字节的练习:

    
    unsigned convert(const char * restrict str)
    {
        unsigned result = 0;
        while(*str)
        {
            result *= 2;
            result += *str++ == '1';
        }
        return result;
    }
    
    #define MASK ((1 << CHAR_BIT) - 1)
    #define GETBYTE(val, index) (((val) >> ((sizeof(val) - (index) - 1) * CHAR_BIT)) & MASK)
    
    
    void print(const unsigned val)
    {
        for(int index = 0; index < sizeof(val); index++)
        {
            printf("%02x%c", GETBYTE(val, index), (index == sizeof(val) - 1) ? '\n' : ' ');
        }
    }
    
    int main (void)
    {
      char string[100] = "000000000000000000010000000000";
      unsigned val = convert(string);
      printf("0x%08x\n", val);
      print(val);
    }
    
    
    

    https://gcc.godbolt.org/z/18G7r37TW

    【讨论】:

      猜你喜欢
      • 2018-12-24
      • 2012-06-26
      • 2016-08-28
      • 2013-07-25
      相关资源
      最近更新 更多