将char数组转换为int表示

C++ Convert char array to int representation

本文关键字:int 表示 转换 char 数组      更新时间:2023-10-16

将字符数组(包含来自文件的字节)转换为十进制表示以便稍后可以转换回来的最佳方法是什么?

E。G "test" -> 18951210 -> "test".

没有bignum类是做不到的,因为在unsigned long long中可能的字母组合比整数组合要多。(unsigned long long 容纳约7-8个字符)

如果你有一个bignum类:

biguint string_to_biguint(const std::string& s) {
    biguint result(0);
    for(int i=0; i<s.length(); ++i) {
        result *= UCHAR_MAX;
        result += (unsigned char)s[i];
    }
    return result;
}
std::string biguint_to_string(const biguint u) {
    std::string result;
    do {
        result.append(u % UCHAR_MAX)
        u /= UCHAR_MAX;
    } while (u>0);
    return result;
}

注意:从字符串到int的转换将失去前导null,从int到字符串的转换将失去尾随null。

我不确定你到底是什么意思,但是字符作为它们的"表示"存储在内存中,所以你不需要转换任何东西。如果你还想,你必须更具体。

编辑:你可以

  • 尝试一个字节一个字节地读取,将结果向左移动8位并将其环接
  • 尝试使用mpz_inp_raw

您可以使用类似于霍夫曼压缩算法的树,然后将树中的路径表示为数字。

您必须将字典保存在某个地方,但是您可以创建一个覆盖整个ASCII表的常量字典,因为这里的目标不是压缩。

不需要转换。你可以直接使用指针。

的例子:

char array[4 * NUMBER];
int *pointer;

请记住pointer的"长度"是NUMBER

如前所述,字符串已经是字节范围(因此很容易呈现为十进制数字)。将字节从000编号到255,并将它们串在一起,就得到了一个十进制数,不管它值多少。如果你确切地解释为什么你想要使用十进制数,特别是十六进制会更容易,这会有所帮助。

如果您关心构成Unicode字符串的这些数字的底层数组的压缩,您可能会对以下内容感兴趣:

http://en.wikipedia.org/wiki/Standard_Compression_Scheme_for_Unicode

如果你想要一些压缩的好处,但仍然希望在一个"打包"的数字内快速随机存取读写,你可能会发现我的"NSTATE"库很有趣:

http://hostilefork.com/nstate/

例如,如果你只想要一个只容纳26个英文字母的表示…您可以将"test"存储在:

NstateArray<26> myString (4);

您可以在不经过压缩或解压缩过程的情况下读取和写入字母,其数字范围比传统字符串更小。

假设您想将整数(我将其读取为ascii码)存储在字符串中。这将添加前导零,您需要将其返回到原始字符串中。Character是一个最大值为255的字节,所以它需要三个数字形式。不使用STL也可以很容易地完成。但为什么不使用现有的工具呢?

#include <iostream>
#include <sstream>
using namespace std;
char array[] = "test";
int main()
{
   stringstream out;
   string s=array;   
   out.fill('0');
   out.width(3);
   for (int i = 0; i < s.size(); ++i)
   {
      out << (int)s[i];
   }
   cout << s << " -> " << out.str();
   return 0; 
}
输出:

test -> 116101115116

补充道:

将line改为

out << (int)s[i] << ",";

输出
test -> 116,101,115,116,