【问题标题】:How to convert an integer into char array and reverse to get the same number?如何将整数转换为 char 数组并反转以获得相同的数字?
【发布时间】:2020-02-27 11:41:14
【问题描述】:

我想将一个整数转换为 char 数组并从该 char 数组中检索相同的数字。

考虑数字 20。 作为 1 个 int(4 个字节)= 1 个字符,

0000 0000 0000 0000 0000 0000 0001 0100 = (20) 十进制

___0 ___0 ___0 ___0 ___0 ___0 ___1 ___4 = 十六进制表示

我希望这种模式 00000014 仅作为 4 个字符存储在 char 数组中,因为整数占用 4 个字符的空间,这样转换为整数后的 char 数组(可以使用 sscanf())将给出相同的结果( 20).

我该怎么做?

【问题讨论】:

  • 您已将您的问题标记为 C 和 C++,而不是您使用的语言。这违反了标签的使用说明。请仅使用您正在使用的语言进行标记,而不是多种语言。

标签: c arrays char int


【解决方案1】:

您可以使用union

union myUnion { 

    int x;
    char bytes[sizeof(int)]; 
}; 

并像这样使用它:

union myUnion un;
un.x = 98632;

在这种情况下,un.bytes 保存整数 98632 的字节。如果您更改其中任何一个,则更改也会反映在 un.x 中,因为 union 中的所有内容都有一个共同的内存位置。

转换会自动为您处理,如果您想要int,只需通过un.x 获取它,如果您想要字节,则通过un.bytes 获取它们。无论您更改哪个工会成员,由于它是 union,因此也会在其其他成员中相应地进行更改。

【讨论】:

  • True @ikegami,32 位和 64 位并移动评论。
  • (甚至可以小到16位)
  • @ikegami 你在拉伸它哈哈 :-) 但你是对的。
【解决方案2】:

将每个数字从 0 到 15 映射到相当于十六进制的 0 到 f。应用一个 while 循环,在除以 16 时取余数,并将其附加到字符串并在每个步骤中将其除以 16。最后的字符串将是反向的,如果要对其进行操作,我会将其保持反向。如果要打印,请反向打印。

要将十六进制字符串转换回 int,请反转此过程。

char mapping[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

void convert(string& s, int n)
{
    while (n)
    {
        int r = n % 16;
        s += mapping[r];
        n /= 16;
    }
}

int main()
{
    int n = 20;
    string s;
    convert(s, n);
    cout << s << endl;
}

【讨论】:

  • 我觉得一个 C 问题的 C++ 答案是次优的。
  • @alk 嗯。他们一定是编辑了它,因为除了 SO 上的 C++ 标签,我什么都不搜索。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多