原始数据中的值是否为十六进制字符串转换错误?

时间:2014-06-27 17:11:30

标签: c++ hex stdstring data-conversion

我使用以下代码将原始数据值转换为hexstring,以便我可以找到一些信息。但我得到了FFFFFFFF,我应该得到FF。

例如,结果应为" FF 01 00 00 EC 00 00 00 00 00 00 00 00 00 E9",但我得到" FFFFFFFFF 01 00 00 FFFFFFEC 00 00 00 00 00 00 00 00 00 FFFFFFE9"。

有谁知道这里发生了什么?

std::vector<unsigned char> buf;
buf.resize( ANSWER_SIZE);

// Read from socket
m_pSocket->Read( &buf[0], buf.size() );
string result( buf.begin(), buf.end() );
result = ByteUtil::rawByteStringToHexString( result );

std::string ByteUtil::int_to_hex( int i )
{
    std::stringstream sstream;
    sstream << std::hex << i;
    return sstream.str();
}

std::string ByteUtil::rawByteStringToHexString(std::string str)
{
    std::string aux = "", temp = "";
    for (unsigned int i=0; i<str.size(); i++) {
        temp += int_to_hex(str[i]);

        if (temp.size() == 1) {
            aux += "0" + temp + " "; // completes with 0
        } else if(i != (str.size() -1)){
            aux += temp + " ";
        }
        temp = "";
    }

    // System.out.println(aux);
    return aux;
}

UPDATE:调试,我注意到int_to_hex正在返回FFFFFFFF而不是FF。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

请注意unsigned中使用int代替int_to_hex()

#include <iostream>
#include <sstream>

std::string int_to_hex(unsigned i)
{
    std::stringstream sstream;
    sstream << std::hex << i;
    return sstream.str();
}

int main() {
    std::cout << int_to_hex(0xFF) << "\n";
}

输出

[1:58pm][wlynch@watermelon /tmp] ./foo
ff

另外...

我们还可以在question you are looking at中看到,他们执行static_cast来获得相同的结果。

ss << std::setw(2) << static_cast<unsigned>(buffer[i]);

答案 1 :(得分:0)

好的伙计们,抱歉延误,我跑到周末,参加了一些FIFA世界杯比赛。

无论我做出什么改变,我得到了相同的结果,所以我决定在代码之前进行一些更改,然后我从

切换输入参数
std::string ByteUtil::rawByteStringToHexString(std::string str)

std::string ByteUtil::rawByteStringToHexString(vector<unsigned char> v)

并保留@sharth建议的更改。现在我得到了正确的结果。

谢谢大家的帮助!!