【问题标题】:How to add 3 chars into a single char in C? [closed]如何在 C 中将 3 个字符添加到单个字符中? [关闭]
【发布时间】:2017-05-01 13:32:08
【问题描述】:

我有这样的字符数组:

char a[6] = {49, 50, 54, 49, 49, 54}; // ASCII '1', '2', '6', '1', '1', '6'
char b[2];

我想将a[0]、a[1]、a[2]转换为b[0],将a[3]、a[4]、a[5]转换为b[1]。这样我就可以拥有这样的:

b[0] = 126;
b[1] = 116;

我该怎么做?

【问题讨论】:

  • 您希望如何将这 6 个字节神奇地压缩为 2 个字节?此外,您希望他们如何成为的例子完全没有意义。
  • 永远不可能有“三字节char”! char总是一个字节。并且不要使用幻数。如果你的意思是'1',那就写吧!
  • @Olaf:如果您绝对需要{49, 50, 54, ... 设为ASCII,则无论系统如何,使用{49, 50, 54, ... 在技术上更便携。
  • @TimČas:指定输出字符集是正确的做法。或者只是为字符串文字使用 u8 前缀,UTF-8 与 ASCII 兼容。编写可读代码是程序员的主要目标。

标签: c


【解决方案1】:

你可以这样做:

b[0] = (a[0] - '0') * 100 + (a[1] - '0') * 10 + (a[2] - '0');

对于 b[1] 也是如此。

请注意,如果a 中的字符不是数字,或者表示的值超出了可以存储在char 中的范围,则结果将是未定义的。

【讨论】:

  • 搞清楚模式干得好! :-) 这感觉有点像密码破解练习...
  • 谢谢 - 我一直在研究我的读心技巧! ;-)
  • 如果 ASCII 大于 255 怎么办?
  • @rootTraveller:如果发生这种情况,则问题陈述不完整,因为无法表示结果,并且未指定此类条件的行为。
  • @PaulR 是的。您应该为新手提及它。
【解决方案2】:

您似乎正在将十进制表示形式转换为字节。 sscanf可以帮您处理如下:

char a[6] = {49, 50, 54, 49, 49, 54};
signed char b[2];
sscanf(a, "%3hhi%3hhi", &b[0], &b[1]);

Demo.

【讨论】:

    猜你喜欢
    • 2021-05-25
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多