将无符号字符数组转换为int C ++

时间:2018-08-01 17:04:12

标签: c++ type-conversion

如何将包含字母的无符号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;
}

3 个答案:

答案 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类型大小的长度。您应该检查一下。