如何将一串二进制数转换为 C 中的字符(每个字符都必须有一个半字节)?

Posted

技术标签:

【中文标题】如何将一串二进制数转换为 C 中的字符(每个字符都必须有一个半字节)?【英文标题】:How can I convert a string of binary numbers into characters in C (each character has to have a nibble)? 【发布时间】:2021-09-01 15:11:03 【问题描述】:

我已经寻找了有用的函数,可用于将二进制数字字符串转换为 ASCII 字符字符串。我尝试使用这些 C++ 库转换字符串

#include <sstream>
#include <iostream> 

但我的编程环境(来自国家仪器的 CVI)没有它们。 如果有人有转换功能的例子,我会很高兴! 提前非常感谢。

【问题讨论】:

那些不是“库”。 用布尔代数(位掩码,移位)取出半字节,并使用它们来索引文字数组“0123456789ABCDEF”。 您提到的标题是针对 C++ 的,但您已经标记了您的问题 C。您使用的是哪种语言?此外,您需要更清楚“二进制数字串”的含义。 @ScottHunter 头文件?我以为它们被称为库文件。 【参考方案1】:

您的问题非常模糊,没有显示任何实际尝试,这使得您更难弄清楚您的意思。

大概是这样的:

#include <stdio.h>

void hexprint(char *out, const void *in, size_t length)

  const static char hexdigits[] = "0123456789abcdef";
  const unsigned char *bin = in;
  while (length--) 
    const unsigned char here = *bin++;
    *out++ = hexdigits[here >> 4];
    *out++ = hexdigits[here & 15];
  
  *out = '\0';


int main(void)

    char buf[32], data[] = 0xde, 0xad, 0xf0, 0x0d, 0xba, 0xbe ;
    hexprint(buf, data, sizeof data);
    printf("Got '%s'\n", buf);
    return 0;

这会打印出Got 'deadf00dbabe'。请注意,输出缓冲区默认为 Big Enough(TM),请小心。

【讨论】:

以上是关于如何将一串二进制数转换为 C 中的字符(每个字符都必须有一个半字节)?的主要内容,如果未能解决你的问题,请参考以下文章

java编写将一串字符串中的奇数位提出来相加并且偶数位每个数相加

如何用JS将一段十六进制(HEX)字符串转换为汉字?

怎么将一段字符转换成MultipartFile

lua语言 如何将字符串整体转换为一个十进制数据 而不按照每个字符转为若干个十进制数

在C中有效地将十六进制字符串转换为整数?

python实现将一串字符每两个一组,中间用空格隔开