2
給定一個無符號整數,我需要以6位長的十六進制值結束。C++ trim和pad無符號整數,十六進制爲#RGB值
- 81892(己烷:13FE4),應成爲13FE40或013FE4
- 3285446057(己烷:C3D3EDA9),應成爲C3D3ED或D3EDA9
由於我參與的項目使用Qt,我通過這種方式解決了這個問題:
unsigned int hex = qHash(name);
QString hexStr = (QString::number(hex, 16) + "000000").left(6);
bool ok;
unsigned int hexPat = hexStr.toUInt(&ok, 16);
這填充右邊的十六進制數字串,然後從左邊的第六個字符後修剪它。做相反,我想簡單地更換的第二行:
QString hexStr = ("000000" + QString::number(hex, 16)).right(6);
的值將是used for RGB values,這就是爲什麼我需要六個十六進制數字(0和255之間的三個值)。
是否有更高效的方法來實現這些結果(或兩者)而不轉換爲字符串,然後返回?
BYTE在http://stackoverflow.com/a/20025042/188159?我可以使用int還是unsigned int來避免包含任何內容並定義新類型? (我覺得我應該那樣做,因爲我幾乎不知道我貢獻的項目,可能還不知道這樣的增加對性能和其他代碼段可能會有什麼影響)PS:謝謝你重申我的問題,這是非常有助於理解過程。 – qubodup
對不起,我已經習慣了Windows,我忘了它不是該語言的一部分。 'BYTE'被定義爲'unsigned char'。它也許可以工作,儘管不太具體,用int或uint,取決於值以後需要去的地方。 – Rotem
謝謝澄清。我特別感興趣的是使用最重要的字節(左邊的部分),但不幸的是你的代碼似乎不能處理短散列。 1cf9e變爲00,01,而不是1c,f9,e0和ef變爲00,00,00而不是ef,00,00 http://rextester.com/PGV72502(使用unsigned char而不是unsigned int時也會發生) - 我也擔心這可能是32位/ 64位操作系統之間不一致? – qubodup