【问题标题】:How to save an int value in a char如何将int值保存在char中
【发布时间】:2012-11-15 14:48:17
【问题描述】:

我有小于 255 的整数,并希望将它们保存到 char 数组中。我正在尝试一些测试:

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

int
main(void)
{
    char string[10];
    int integers[10]; //all under 255.

    int j;
    for(j=0; j<10; j++)
    {
            integers[j]=j;
    }

    int i;
    for(i=0; i<10; i++)
    {
            string[i]=(char)integers[i];
    }

    printf("%s \n", string);
    return 0;
}

当我将调试器运行到程序末尾时,字符串包含以下 ascii 值:

"\000\001\002\003\004\005\006\a\b\t"

首先我不明白为什么在 006 之后出现一个 \a,最后出现一个 \t?

其次我想知道是否有更好的方法来做我想做的事?谢谢

【问题讨论】:

  • 调试器认为如果你有一个字符数组,你会想要将它们解释为字符,因此它为具有八进制符号替代的字符提供了更熟悉的符号。如果继续,您会看到\n\r\v 也出现。 AFAIK,没有办法让 GDB 将数组视为微小整数而不是字符的数组,但我不是 GDB 专家,这从来没有让我担心。

标签: c ascii


【解决方案1】:

您看到的是 ASCII 字符 0x06、0x07、0x08 和 0x09 的转义表示。

0x06 是ACK

0x07 是BEL\a(警报),只会导致终端“叮”!

0x08 是BS 或退格键或\b

0x09 是TAB\t

【讨论】:

  • 但如果是这种情况,有没有办法将 \a \b 和 \t 读回整数值?
  • @patriques: printf("%d \n", string);另外,如果你想要整数而不是 ASCII 字符,那么你应该使用 uint8_t 而不是 char 作为变量的类型。
【解决方案2】:

您使用的 ASCII 字符 0-9 是不可打印的字符。

printf 函数将它们格式化为 \nnn 以便可以看到它们。

ASCII字符9是制表符,通常表示为\t
ASCII 字符 8 是退格字符,表示为\b
ASCII字符7是响铃“或报警”字符,常用表示为\a

http://web.cs.mun.ca/~michael/c/ascii-table.html

【讨论】:

    【解决方案3】:
    #include <stdio.h>
    
    int main (void)
    {
        char string[10];
        int i;
    
        for(i=0; i<10; i++)
        {
          string[i] = i;
        }
        string[9] = '\0';
    
        printf("%s \n", string);
    
        return 0;
    }
    

    【讨论】:

      【解决方案4】:

      您不需要创建第一个整数数组。 可以直接填充字符串数组。

      char string[11];
      int i;
      for(i=0; i<10; i++)
      {
          string[i] = i;
      }
      string[i] = '\0';
      

      【讨论】:

      • 好吧,你会用这种方式覆盖 9。谢谢
      • 我不这么认为。 9 将在字符串 [9] 中。当循环退出时,i = 10。所以 string[i] 为“空”
      【解决方案5】:

      使用 atoi 函数将 ascii 值转换为整数

      【讨论】:

      • 是的,但这不是问题要问的。
      • 但如果是这种情况,有没有办法将 \a \b 和 \t 读回整数值? – patriques 1 小时前
      • \a 符号只是它的显示方式;在内部,它是一个数字 (7)。您会发现 48 显示为 0(零),65 显示为 A 和 97 显示为 a,等等(除非您使用非常不寻常的代码集)。普通的char(不同于signed charunsigned char)可以是有符号或无符号类型;您可以存储从 -128 到 +127 或从 0 到 255 的值。如果您希望 0 到 255 可靠,请明确使用 unsigned char。但 GDB 仍会尽可能将存储在任何 char 类型中的整数值显示为字符。
      猜你喜欢
      • 2012-07-21
      • 2018-06-05
      • 1970-01-01
      • 2017-01-18
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 2021-12-12
      • 1970-01-01
      相关资源
      最近更新 更多