如何将包含字母的无符号char数组转换为整数。我已经尝试过这样做,但是它最多只能转换四个字节。我还需要一种将整数转换回无符号char数组的方法。
int buffToInteger(char * buffer)
{
int a = static_cast<int>(static_cast<unsigned char>(buffer[0]) << 24 |
static_cast<unsigned char>(buffer[1]) << 16 |
static_cast<unsigned char>(buffer[2]) << 8 |
static_cast<unsigned char>(buffer[3]));
return a;
}
答案 0 :(得分:0)
您似乎正在尝试使用for
循环,即一次又一次地重复执行任务,而步数不确定。
unsigned int buffToInteger(char * buffer, unsigned int size)
{
// assert(size <= sizeof(int));
unsigned int ret = 0;
int shift = 0;
for( int i = size - 1; i >= 0, i-- ) {
ret |= static_cast<unsigned int>(buffer[i]) << shift;
shift += 8;
}
return ret;
}
答案 1 :(得分:0)
我认为您要使用的称为哈希-将对象转换为唯一的整数。问题是散列不可逆。对于hash("WXYZABCD", 8)
和hash("ABCD", 4)
,此哈希将产生不同的结果。 @Nicholas Pipitone的回答不会为这些不同的输入产生不同的输出。
一旦计算出该哈希值,就无法取回原始字符串。如果您想了解原始字符串,则必须将原始字符串保留为变量。
int hash(char* buffer, size_t size) {
int res = 0;
for (size_t i = 0; i < size; ++i) {
res += buffer[i];
res *= 31;
}
return res;
}
答案 2 :(得分:0)
以下是将char数组的第一个sizeof(int)字节转换为int的方法:
int val = *(unsigned int *)buffer;
并转换回去:
*(unsigned int *)buffer = val;
请注意,缓冲区必须至少为int类型大小的长度。您应该检查一下。