【问题标题】:Conversion from Byte to ASCII in C在 C 中从字节转换为 ASCII
【发布时间】:2010-04-02 08:45:07
【问题描述】:

谁能建议在 C 中将字节数组转换为 ASCII 的方法?或者将字节数组转换为十六进制,然后转换为 ASCII?

[04/02][已编辑]:换个说法,我希望将字节转换为十六进制并将转换后的十六进制值存储在数据结构中。应该怎么做?

问候, 小黑子

【问题讨论】:

  • 一个 ASCII 编码字符串 is 一个字节数组,所以你的问题没有多大意义。
  • 我认为字节数组 /was/ 是 C 语言中的 ASCII 字符串。你能举出你想要的输入和输出的例子吗?
  • 吹毛求疵:字符串字节数组和字节数组可以被解释为字符串。
  • 只需将 0 附加到数组中,您就得到了字符串
  • @Felix,你的挑剔是递归的。

标签: c byte


【解决方案1】:

好吧,如果您在 C 中将整数解释为 char,您将得到该 ASCII 字符,只要它在范围内。

int i = 97;
char c = i;

printf("The character of %d is %c\n", i, c);

打印:

The character of 97 is a

请注意,没有进行错误检查 - 我假设 0 <= i < 128(ASCII 范围)。

否则,字节值数组可以直接解释为ASCII字符串:

char bytes[] = {97, 98, 99, 100, 101, 0};

printf("The string: %s\n", bytes);

打印:

The string: abcde

注意最后一个字节:0,它是正确终止字符串所必需的。您可以将bytes 用作任何其他 C 字符串,从中复制,将其附加到其他字符串,遍历它,打印它等等。

【讨论】:

  • 整数不必是0 <= i < 128 或(32 <= i < 128 用于可打印字符)。如果将整数转换为字符,则整数将被截断为 8 个 LSB(最低有效位)。只有那些必须在范围内。例如。 i = 1121i = 97 (1121 = 1024 + 97) 给出相同的结果
  • @Felix: 是的,但它没有多大意义,因为你得到了int 的模 256,这不太可能是程序员的愿望。
  • Nitpick: 'a' 在 C 中可能是也可能不是 97。在当今的大多数计算机上,它是,但 C 标准不能保证这一点。要便携地做到这一点,必须制作一个查找表。当然,'a' == 97 在当今的大多数系统上都是正确的。
  • 嗨,我的意思是如何将字节转换为 ASCII 并将这些值存储在数组中?
  • @darkie15:我不明白你的意思。仔细阐述(或者用一个例子更新问题)??
【解决方案2】:

首先,您应该更加注意问题的表述。很难说出你真正想听到的内容。我认为你有一些二进制 blob 并希望它以人类可读的形式出现,例如将其转储到屏幕上以进行调试。 (我知道我可能在这里误解了你)。

您可以使用 snprintf(buf, sizeof(buf), "%.2x", byte_array[i]) 例如将单个字节转换为十六进制 ASCII 表示。这是一个在屏幕上转储整个内存区域的函数:


void
hexdump(const void *data, int size)
{
    const unsigned char *byte = data;

    while (size > 0)
    {
        size--;
        printf("%.2x ", *byte);
        byte++;
    }
}

【讨论】:

    【解决方案3】:

    Char.s 和 Int.s 在 C 中以二进制形式存储。在 ASCII 范围内工作时,通常可以相互代替使用。

    int i = 0x61;
    char x = i;
    
    fprintf( stdout, "%c", x );
    

    应该在屏幕上打印“a”。

    【讨论】:

    • 你说字符是整数吗?
    • 实际上不,我不这样做,因为那是错误的,他们不是。它们通常具有不同的大小(字节与字),但是您可以将字符视为整数,反之亦然。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 2015-09-30
    • 2011-01-13
    相关资源
    最近更新 更多