2013-07-29 30 views
1

請考慮以下幾點:定製的std ::六角機械臂,對於無符號字符工作

unsigned char a(65); 
unsigned char z(90); 

std::cout << std::hex << a << ", " << z <<std::endl; 

輸出:

A, Z 

但所需的輸出是:

41, 5a 

爲了實現這一目標我想避免必須轉換這樣的值,例如:

std::cout << std::hex << int(a) << ", " << int(z) <<std::endl; 

,而是有一些神奇的手,我可以事先包括:

std::cout << uchar_hex_manip << a << ", " << z << std::endl; 

所以要求我的問題是,我該怎麼定義「uchar_hex_manip」工作?

UPDATE:我明白迄今爲止所有的意見和建議,但我已經說過我想避免轉換價值觀,似乎沒有人會完全承認。 '我上面提到的'a << ", " << z'代表了稍後流式傳輸的值 - 在我們的應用中,這種情況的實際使用情況是有一些更復雜的事情發生,因爲各種原因,理想的情況是不需要鞋對於特定情況下的角色。

+0

不要以爲這種轉換帶來了很多好處 – billz

+1

你可以編寫你自己的操作器,它會返回** your ** class,它是從'basic_ostream'派生的。在那個類中,你可以覆蓋'operator <<'作爲'unsigned char'來將它打印爲整數。不幸的是,我現在沒有足夠的時間來寫這個作爲答案的例子。 *但請注意:僅僅因爲這是可能的**並不意味着你應該這樣做; **我建議將其轉換爲'int'而不是**。* – soon

+0

「希望避免轉換值」---不會發生。 「在我們的應用程序中的實際使用案例是,有更復雜的東西」 - 那麼也許你正在尋找解決錯誤問題的方法。 –

回答

1

如果你想打印char爲十六進制,你需要將其轉換爲一個int:

std::cout << std::hex << static_cast<int>('a'); 

應該做的伎倆。

原因std::hex不起作用上char(或unsigned char)是用於char流輸出操作者被定義爲打印字符作爲輸出。沒有修飾符可以改變這種行爲(雖然@soon建議編寫自己的類 - 這是避免劇情的很多工作)。

+0

這不是我之後的解決方案。 – Benedict

+0

也許我的回答不夠清楚:你做不到! –

相關問題