将char数组转换为int表示
C++ Convert char array to int representation
将字符数组(包含来自文件的字节)转换为十进制表示以便稍后可以转换回来的最佳方法是什么?
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,
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 使用 int 表示浮点除法 C++
- 是否可以保证按字节的零 int 是零的表示形式?
- 使用 int 指针的浮点数的位表示形式
- 如何检查 int 变量是否包含合法(非陷阱表示)值?
- 为表示一个或多个操作的C++函数的int参数寻找类型安全的替换
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- 在二进制表示中将二进制 std::string 转换为 int
- 由INT数据类型(低,高)结构表示的双数据类型
- 表示给定"int"的最小位数
- 为什么不能将 int(表示 ASCII 字符)转换为 std::字符串,而没有大括号环绕在 int 周围?
- 使用inet_pton()获取IPv4地址的无符号int表示形式
- 使用向量<对<字符串,int > >表示哈希表
- C/C++ int[] vs int*(指针与数组表示法).有什么区别
- 查找存储在长位中的最后一个int(1-9)(每个int由4位表示)
- c++帮助设计类ConstArray和Array,它们表示一种int值的动态数组
- 将 int 的所有字节设置为(无符号字符)0,保证表示零
- x[0] == 1 在 C++11 中表示 1 个常量表达式,当 x 是常量 int[]
- 在c++中将N位int表示为十六进制
- 将char数组转换为int表示