2012-09-12 40 views
2

我正在使用ZeroMQ庫,它使用void *來表示任意二進制數據塊。不過,我想用std::vector複製並移動這些塊。 std::vector代表原始字節的首選慣用方法是什麼?我目前使用的是std::vector<unsigned char>,但我想確保我的代碼對其他人有意義。在std :: vector中表示原始字節的最佳方法是什麼?

+0

'unsigned char'確定。如果你想強調八位字節部分,你也可以使用'uint8_t'。 –

+0

我會'typedef uint8_t byte;',或者甚至可以創建一個你無法做任何事情的類。 (不添加字節togeather) –

+0

是否ZeroMQ本身指定是否讀取數據「作爲字符」或「作爲無符號字符」?如果沒有,那麼unsigned char應該沒問題。如果它指定了'char',那麼你可能想用它來強調你正在提供圖書館所期望的。無論如何它不應該有任何區別。 –

回答

8

要麼

std::vector<unsigned char> 

#include <cstdint> 

std::vector<std::uint8_t> 

似乎都沒什麼問題。

+2

'uint8_t'在沒有8位字節的系統上不存在。 'uint_least8_t'可能是更好的選擇,但'unsigned char'是最好的選擇。 –

+0

該解決方案似乎被廣泛用於存儲原始數據。對我而言,不清楚爲什麼要使用「uint8_t」而不是「int8_t」 - 是否有人知道優勢? Java只有簽名數據類型,所以爲什麼要在C++中使用unsigned int? –

0

如果你不知道數據的性質,unsigned char是你可以代表的最小塊,而不會混亂。因此它是任何類型的任意內存塊的常見類型。

所以你的矢量看起來非常好,它的方式。

相關問題