鉴于3个不同的字节,比如说x = 64,y = 90,z = 240,我希望将它们连接成一个像6490240这样的字符串.如果这样可行,那将是可爱的,但事实并非如此:
string xx = (string)x + (string)y + (string)z;
Run Code Online (Sandbox Code Playgroud)
我正在使用C++工作,并将使用8位表示法将字节串联为24位字符串.
它需要超快,因为我在很多数据上使用这种方法,并且看起来令人沮丧的是,他们不能只是说这个字节就好像是一个字符串.
非常感谢您的帮助
为了澄清,我特别关注使用3个字节的原因是因为原始数据属于通过指针读取的RGB值,并且当然作为字节存储在存储器中.
我想要一种独立处理每种颜色的方法,以便您可以将其视为散列函数.因此,需要任何没有碰撞的快速表示.这是我能想到的唯一可以避免碰撞的方法.
Tim*_*Tim 10
将数字转换为字符串的最简单方法是使用 ostringstream
#include <sstream>
#include <string>
std::ostringstream os;
os << x << y << z;
std::string str = os.str(); // 6490240
Run Code Online (Sandbox Code Playgroud)
您甚至可以使用操纵器以十六进制或八进制执行此操作:
os << std::hex << x << y << z;
Run Code Online (Sandbox Code Playgroud)
更新
既然你已经澄清了你真正想做的事情,我已经更新了我的答案.您希望将RGB值作为三个字节,并以某种方式将它们用作键.这最好使用long int,而不是字符串.您仍然可以非常轻松地对int进行字符串化,以便打印到屏幕上.
unsigned long rgb = 0;
byte* b = reinterpret_cast<byte*>(&rgb);
b[0] = x;
b[1] = y;
b[2] = z;
// rgb is now the bytes { 0, x, y, z }
Run Code Online (Sandbox Code Playgroud)
然后,您可以long int rgb非常有效地使用作为您的密钥.每当你想要打印出来时,你仍然可以这样做:
std::cout << std::hex << rgb;
Run Code Online (Sandbox Code Playgroud)
根据系统的字节顺序,您可能需要使用您设置的long int的哪些字节.我的示例覆盖了字节0-2,但您可能希望写入字节1-3.您可能希望将顺序写为z,y,x而不是x,y,z.这种细节取决于平台.虽然如果您从不想打印RGB值,但只想将其视为散列,那么您无需担心自己编写的字节数或顺序.