【问题标题】:Converting an integer to to ascii values C++将整数转换为 ascii 值 C++
【发布时间】:2014-03-31 19:00:25
【问题描述】:

我正在尝试使用 ascii 将数字转换为字母,目前我可以一次一个字母:

编辑:我一直在研究的 RSA 加密的输出目前是整数形式,我正在尝试研究如何将其转换为原始输入的单词/句子。我几乎完成了,但我完全陷入了最后一个“障碍”。我添加上下文是因为有评论询问我为什么要这样做(或类似的话)。

编辑:如果在加密过程中我使用 ASCII 值 - 87,所有字母都是 2 位长,消除了一些 ASCII 字符是 3 个字母和一些是 2 个字母的问题,这是否使问题更容易解决? (它限制我只能使用字母,但这对于它的目的来说很好)

#include <string>
#include <iostream>

char returnChar(int x)
{
    return (char) x;
}

int main()
{
    std::cout << returnChar (119);
}

这会转换 32 --> w.

如何调整此函数以允许我将“3232”->“ww”或任何其他整数更改为 ascii 字符,例如"32242713" --> "单词"。

编辑:我认为使用某种 mod 函数将其拆分为两个数字的块,然后可以将其转换为字符可能有效?

如何解决一些 ascii 字符有 2 位和一些有 3 位的问题? 我认为这个问题已经按照第二次编辑中的描述解决了

如果您发现我以完全错误的方式处理此问题,您能否建议一个可行的替代方法供我尝试?

感谢您的任何反馈。

【问题讨论】:

  • 你想做什么?您期望这解决的外部问题是什么? “我如何克服一些 ascii 字符有 2 位数字和一些有 3 位数字的问题?”的答案。永远,永远做这样的远程事情。
  • 如果你想将一串数字转换为一个没有分隔符的字符串,那是行不通的,因为解释有歧义。
  • 也许如果你在数据值之间加上逗号,或者如果你将数据存储在一个数组中,你可以解决你的 2 或 3 个字符的问题。
  • 啊,所以您需要一种将字符串转换为整数的合理方法。也许您可以将每个字符填充为三位数字,因此 102,31,41,123 将是“102,031,041,123”? (据记录,这与 RSA 在现实中的使用方式相差甚远。)
  • 无法解密的加密方案有什么好处?

标签: c++ string casting ascii


【解决方案1】:

你所要求的是不可能的。你有几个选择:

  1. 将 int 更改为字符串并将空格/其他字符放入字符串中:

    std::string test = "119 119";

  2. 将总值转换为二进制,逐字节解析:

    unsigned int test = 30583; // 119*256+119 char a = (test>>8)&0xff; char b = test&0xff;

  3. 在向量中传递数据并一次转换一个元素:

    std::vector<char> returnChar(const std::vector<int> &data){ std::vector<char> output; for(unsigned int i=0;i<data.size();i++) output.push_back(char(data[i])); return output; }

我可能会坚持使用第二种方法,因为 - 这里是一个疯狂的猜测 - 它不应该改变你实际生成数字的内部的太多东西。

【讨论】:

  • 整数将是不同的大小,并且每次都由不同的数字组成,所以我不认为 1 是一个选项,请您扩展 2 吗?我不认为我明白你的意思?感谢您的帮助
  • 你能解释一下你所说的“逐字节解析”是什么意思吗?
  • C++ 中有特殊的二元运算符。一个整数(通常)是 4 个字节长。您可以使用这些运算符获取 int 的特定字节。我给出的示例将一个 int 解析为两个字符。如果您想在 int 中存储 4 个值,请执行:char a,b,c,d; unsigned int test = (a&lt;&lt;24)+(b&lt;&lt;16)+(c&lt;&lt;8)+d 并像示例中一样检索它们(通过 0、8、16 和 24 执行 &gt;&gt;
  • @MichaelRad 这应该可以帮助您理解:cprogramming.com/tutorial/bitwise_operators.html
  • 谢谢,但我就是不知道如何使用它?对不起,如果我是令人沮丧的愚蠢,我真的很感激帮助(即使我不明白)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 2014-09-03
  • 2020-05-22
  • 1970-01-01
  • 2017-06-27
  • 2014-08-15
  • 2013-01-13
相关资源
最近更新 更多