2012-05-03 81 views
-1
std::vector<unsigned char> Data = example 

我在互聯網上發現了這個地方,我認爲它將一個未知大小的字節數組寫入給定的地址,但我不完全確定。任何人都可以解釋這是什麼嗎?什麼是「std :: vector <unsigned char>數據=示例」?

如果這沒有做什麼,我覺得它確實有人可以幫助我產生一個C++函數,它的地址和字節作爲參數,並在該地址也就是將它們寫:

myfunction(0xaddress, {0x10, 0x11, 0x12}); // something like this 
+0

你的意思是'std :: vector Data =「example」;' – Lazylabs

+0

'example'是如何定義的? – trojanfoe

+0

這正是我給的,抱歉不能幫助你更多我不擅長這個記憶寫作業務:(我添加了更多的第一篇文章。 – kvanberendonck

回答

2

如果要將x字節數寫入地址,則有多個選項。

void myfunction(void* address, size_t count, const unsigned char data[]) 
{..} 

const unsigned char bytes[] = {0x10, 0x11, 0x12}; 
myfunction (address, 3, bytes); 

其中第二個參數count是數組的長度。
或者具有可變參數函數:

void myfunction(void* address, size_t count, ...) 
{..} 

myfunction (address, 3, 0x10, 0x11, 0x12); 

在任何情況下,你需要給字節數雖然明確;編譯器無法從數據中推斷出這一點。

如果你想使用一個向量,這是可能的,但你需要在調用函數之前首先填充向量,效率不高。

,你就不需要提供自己算的唯一情況是,如果沒有一個字節將具有值0,那麼你可以寫

void myfunction(void* address, const char* str) 
{..} 

myfunction (address, "\x10\x11\x12"); 

,因爲你可以使用strlen!

編輯: 此外,std::basic_string<unsigned char>將值得研究。但是在這裏,給這個值包含\x00值也不是微不足道的。

2

=運算符的向量將複製右值的內容(假設右值是具有相同類型的類型向量或實現了從同一類型向量的類型的類)。

沒有地址被複制到這裏只有內容。

+0

你怎麼知道這是一個右值?我們可以猜測的有關「示例」的少數情況之一是它可能是一個左值。 – Benj

+0

實際上,如果它是一個右值,那麼這個答案在現代編譯器中是錯誤的,因爲右值將使用移動語義或elision移入向量中。 – Benj

+0

在這個特殊情況下的例子我認爲它是 – giorashc

相關問題