我使用以下代码将原始数据值转换为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。我该如何解决这个问题?
答案 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建议的更改。现在我得到了正确的结果。
谢谢大家的帮助!!