将char数组(包含文件中的字节)转换为十进制表示形式的最佳方法是什么,以便以后可以将其转换回来?
例如“测试” - > 18951210 - > “测试”。
EDITED
答案 0 :(得分:1)
我不确定你究竟是什么意思,但是字符作为“表示”存储在内存中,所以你不需要转换任何东西。如果你仍然想要,你必须更具体。
编辑:你可以
答案 1 :(得分:1)
没有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;
}
注意:字符串到uint的转换将失去前导NULL,而字符串转换的uint将丢失尾随的NULL。
答案 2 :(得分:0)
您可以使用类似于Huffman压缩算法的树,然后将树中的路径表示为数字。
你必须将字典保存在某处,但你可以创建一个涵盖整个ASCII表的常量字典,因为压缩不是这里的目标。
答案 3 :(得分:0)
无需转换。你可以使用指针。
示例:
char array[4 * NUMBER];
int *pointer;
请注意pointer
的“长度”为NUMBER
。
答案 4 :(得分:0)
如上所述,字符串已经是字节范围(因此很容易呈现为十进制数字)。将你的字节从000到255编号并将它们串在一起,你就得到了一个十进制数,无论价值多少。如果您确切地解释了为什么要使用十进制数,这将有所帮助,具体而言,因为十六进制会更容易。
如果您关心为Unicode字符串形成这些数字的基础数组的压缩,您可能会对以下内容感兴趣:
http://en.wikipedia.org/wiki/Standard_Compression_Scheme_for_Unicode
如果你想要一些压缩的好处,但仍希望在“打包”号码内进行快速随机访问读写,你可能会发现我的“NSTATE”库很有趣:
http://hostilefork.com/nstate/
例如,如果你只是想要一个只能提供26个英文字母的表示......你可以将“test”存储在:
NstateArray<26> myString (4);
您可以在不经过压缩或解压缩过程的情况下读取和写入字母,数字范围小于传统字符串。适用于任何基数。
答案 5 :(得分:0)
假设您要将整数(我在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
<强>加了:强>
将行更改为
out << (int)s[i] << ",";
输出
test -> 116,101,115,116,