【问题标题】:Random int 1-255 to character in C随机 int 1-255 到 C 中的字符
【发布时间】:2011-01-20 19:59:13
【问题描述】:

我有一个返回整数的函数,介于 1 和 255 之间。有没有办法将此 int 转换为我可以将 strcmp() 转换为现有字符串的字符。

基本上,我需要从 PRNG 创建一串字母(所有 ASCII 值)。除了 int 到 char 部分之外,我已经完成了所有工作。没有像 PHP 那样的 Chr() 函数。

【问题讨论】:

  • @Anon。您可能想将其发布为答案,以便我们投票。
  • @Matthew,他们很可能表示 UTF-8。
  • 可能是这样,但 UTF-8 不能仅使用 strcmp 进行比较。
  • 此外,UTF-8 支持很多字符,例如都是中国人。有成千上万个;你如何将一个小于 255 的整数映射到所有这些。所以 UTF-8 不是他想要的。 ISO-8859-x(对于 1
  • 只是想提一下,对于“strcmp() 到现有字符串”我不知道 为什么 你想将 char 与字符串进行比较,但是,如果string 不是一个字符长,它不等于 char。如果它是一个字符长,您只需执行以下操作:if(charA == stringB[0])strcmp 太过分了..

标签: c random char int


【解决方案1】:

C 中的char 只能采用从CHAR_MINCHAR_MAX 的值。如果char 已签名,则CHAR_MAX 可能小于255(例如,常见值为127)。如果char 未签名,CHAR_MAX 必须至少为 255。

假设您的char 是无符号的,您可以将随机数分配给char(例如在您的字符串中)。如果char 已签名,则必须更加小心。在这种情况下,您可能希望将值 mod 128 分配给您的 char

事实上,既然您正在处理 ASCII,那么您可能无论如何都想这样做(ASCII 最多只能达到 127)。

最后,强制性的可移植性说明:char 的整数值可能不代表它的 ASCII 值,如果底层编码不是 ASCII——例如 EBCDIC。

【讨论】:

  • Alok -- +1 只为那条评论:P
  • @BillyONEal:谢谢。我的 3 个答案在短时间内被否决了 - 没有任何解释。叹息。
【解决方案2】:

只需将其转换为char(如下所示)。如果您要在字符串函数(strcat、strcmp 等)中使用它,那么它必须位于末尾带有空终止符 ('\0') 的 char 数组中(如下所示)... .

int num = myrand(1,255);

char str[2] = {(char)num, '\0'};

...

if(strcmp(str, otherString...

【讨论】:

    【解决方案3】:

    只需将其转换为字符:

    char c = (char)myRandomInt;
    

    【讨论】:

      【解决方案4】:

      char 只是一个具有255 值范围的整数,而像'a' 这样的字符文字也只是一个数字。

      只需转换为一个字符。

      char C = 67;
      char c = 'c';
      char zero = 'c' - 'c';
      char also_zero = c - 'c';
      /*Note: zero == 0*/
      

      要使用strcmp 之类的东西,您需要char*。该函数需要一个指向字符数组(以零结尾)的第一个元素的指针,而不是单个字符的地址。

      所以你想要:

      char szp[] = {c, '\0'};
      int isDifferent = strcmp(szp, "c");
      

      【讨论】:

      • CHAR_MAX 如果 char 已签名,则必须最多为 127。你的意思是zero = C - 'c';'c' - 'c' 显然是 0。但如果你的意思是 C - 'c';,那么标准不能保证(尽管在大多数情况下它将是 0)。
      • @Alok: 67 == 'C' 与上述答案无关。重要的部分是分配一个整数文字值。修正了有关签名/未签名的措辞。谢谢。
      • 是的。我只是在评论您对char zero 的声明和初始化。
      • @Alok:我的意思是'c' - 'c',但我添加了另一个c - 'c'。我不是说 C - 'c' 因为 C 是 ascii 中 67 的大写 C
      【解决方案5】:

      在 C 中,char 基本上是介于 0 和 255 之间的 int,因此如果您想将整数直接作为字符处理,则可以将其 sprintf 到缓冲区或类似内容。实际上,您可能希望让您的函数返回 char,以明确发生了什么。

      【讨论】:

        猜你喜欢
        • 2014-05-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-28
        • 1970-01-01
        • 1970-01-01
        • 2018-09-09
        • 2011-09-07
        • 1970-01-01
        相关资源
        最近更新 更多