2017-02-16 32 views
-2

我需要在一個聲明無符號的字符指針裏面有什麼偷看,我減少了我的問題,這個簡單的例子COUT derefernced(無符號字符)的指針,讓我意想不到的效果

#include<iostream> 
int main (int argc, char *argv[]) 
{ 
    unsigned char * buffer = new unsigned char; 
    *buffer = 8; 
    std::cout << "buffer = " << (unsigned char) (*buffer) << std::endl; 
} 

我期待這個輸出:緩衝區= 8

,但我得到 緩衝=

空白,這驅使我堅果,甚至沒有任何價值!

如何我其實和它打交道:

#include<iostream> 
typedef unsigned char uint8_t; 
int main (int argc, char *argv[]) 
{ 
    uint8_t * buffer = new uint8_t ; 
    *buffer = 8; 
    std::cout << "buffer = " << (int) (*buffer) << std::endl; 
} 

我使用NS3這個例子中,緩衝構建了一個字節的有效載荷數據包,而我需要它是一個指針。 這就是爲什麼我實際上將我的問題與「C++」一起標記爲「C」,因爲問題的核心也在C中擔心。但是我發現自己被拒絕投票支持!我知道「cout」和「new」是C++文字,但它與問題無關!

由於沒有與所有的編碼問題,我的問題就是什麼是無符號的字符那麼,如果它的內容與COUT一個普通字符!!!!!

我說我期待它是buffer = 8,因爲無符號字符是一個字節的整數。

謝謝你們,因爲你讓我注意到cout正在處理它,就好像它是一個普通的字符,儘管它對我來說是預期的。

+1

8是第8個字符,而不是字符8 – TemplateRex

+0

@mahmoud你不是'無符號字符'指針。修正標題。 – LogicStuff

+0

@LogicStuff:是的。 '* buffer'是一個'unsigned char','unsigned char'(* buffer)'絕對是一個'unsigned char'。 –

回答

1

'8'是字符8. 8只是一個不可見的字符的代碼。

嘗試編寫*buffer = 48;並根據此table推測爲什麼輸出爲「緩衝區= 0」。

+0

或可能是一個退格:http://www.asciitable.com/ – doctorlove

+0

如何建議代碼是清楚的人類?沒有神奇數字 – StoryTeller

+0

@doctorlove。絕對是一個退格。我不記得我的ASCII代碼。 – riodoro1

3

如果我們稍微延長你的例子是:

int main(int argc, char *argv[]) { 
    unsigned char * buffer = new unsigned char; 
    *buffer = 8; 
    std::cout << "buffer = [" << (*buffer) << "]\n"; 
} 

輸出

buffer = ] 

更多的ASCII字符8表示退格,它已核爆開幕[。 注意你不需要轉換爲無符號字符 - *buffer是一個無符號字符。

如果你想要它有字符'8'你需要將它的內容設置爲8. 不要忘記deletenew什麼。

int main(int argc, char *argv[]) { 
    unsigned char * buffer = new unsigned char; 
    *buffer = '8'; //<---- see the single quotes? 
    std::cout << "buffer = [" << (*buffer) << "]\n"; 
    delete buffer; 
} 

與輸出

buffer = [8] 

當然,我們並不真正需要這些指針:

int main(int argc, char *argv[]) { 
    unsigned char buffer = '8'; 
    std::cout << "buffer = [" << buffer << "]\n"; 
} 

如果你堅持使用原始字符代碼:

int main(int argc, char *argv[]) { 
    unsigned char buffer = 56; 
    std::cout << "buffer = [" << buffer << "]\n"; 
} 

編輯:

如果你想知道什麼是什麼數值是在buffer變量,因此要<<報告的整數值,而不是流爲一個字符,使用強制。

int main(int argc, char *argv[]) { 
    unsigned char buffer = 56; 
    std::cout << "buffer = [" <<static_cast<unsigned int>(buffer) << "]\n"; 
} 
0

發現這個剛纔無符號()

#include<iostream> 
int main (int argc, char *argv[]) 
{ 
    unsigned char * buffer = new unsigned char; 
    *buffer = 8; 
    std::cout << "buffer = " << unsigned(*buffer) << std::endl; 
} 

它給了我在我的問題想輸出buffer = 8 這是不buffer = '8'因爲有些人可能認爲我的意思

+0

這是一個C風格轉換爲'unsigned int'(由於歷史原因,名稱的int部分是可選的)。 –