gpt4 book ai didi

c++ - 原始数据到十六进制字符串转换中的错误值?

转载 作者:行者123 更新时间:2023-11-28 00:27:09 26 4
gpt4 key购买 nike

我正在使用以下代码将原始数据值转换为十六进制字符串,以便找到一些信息。但我得到的是 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;
}

更新:调试时,我注意到 int_to_hex 返回的是 FFFFFFFF 而不是 FF。我该如何解决?

最佳答案

请注意在 int_to_hex() 中使用 unsigned 而不是 int

#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]);

关于c++ - 原始数据到十六进制字符串转换中的错误值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24457373/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com