我可以通過重新解釋演員陣容,大部分時間它被提出,給出了一個警告,所以我想知道是否有其他替代方案(或當然重新演繹演員的清潔實施)如何將unsigned char *的內容轉換爲const char *?
0
A
回答
3
你不說被給予警告什麼,或者什麼問題了,不過鑄造char*
與reinterpret_cast
應無預警工作:
unsigned char *a;
const char *b = reinterpret_cast<char*>(a);
0
這取決於你想要做什麼。
如果你只是想訪問的內容作爲char
,然後進行簡單 static_cast
或使用在一個char
預計 會做的伎倆上下文值。
如果您需要將緩衝區傳遞給期望char const*
, 的函數reinterpret_cast
是唯一的解決方案。
如果你想有一個字符串,使用指針到緩衝區將被罰款:
std::string
bufferToString(unsigned char const* buffer, size_t length)
{
return std::string(buffer, buffer + length);
}
,或者你可以複製到現有的字符串:
myString.assign(buffer, buffer + length);
myString.append(buffer, buffer + length);
// etc.
任何字符串函數(或算法,像std::copy
),可以使用兩個 迭代器。所需要的是取消引用 迭代器會產生一種類型,將其隱式轉換爲char
,即 的情況爲unsigned char
。
(不能使用其採取的緩衝區地址和 長度的字符串函數,因爲這些都不是模板,需要緩衝地址 有型char const*
。雖然unsigned char
轉換隱含 到char
,unsigned char*
需要reinterpret_cast
將其轉換爲 至char*
。)
相關問題
- 1. 將vector <unsigned char>轉換爲const unsigned char *
- 2. 如何將const std :: vector <unsigned char>轉換爲char
- 3. 如何將unsigned char *轉換爲char *
- 4. 將Const char *轉換爲Unsigned long int - strtoul
- 5. 轉換的char *爲unsigned char *
- 6. 如何將塊unsigned char *內存轉換爲[signed] char *內存塊?
- 7. 不能將'const char *'轉換爲'char * const *'
- 8. 如何將unsigned char *轉換爲數組<unsigned char> ^?
- 9. 將數組從unsigned char *轉換爲char *
- 10. 將double轉換爲unsigned char?
- 11. 將unsigned char轉換爲NSString
- 12. 如何將const char * const轉換爲const char *
- 13. 轉換爲unsigned char []
- 14. 將const char *轉換爲char *的問題
- 15. 如何將unsigned char轉換爲jbyteArray
- 16. 不能將Const Char [21]轉換爲Char?
- 17. 在C++中將char *轉換爲const char *
- 18. C++將char轉換爲const char *
- 19. 從'uint8_t * {aka unsigned char *}'無效轉換爲'const char *'[-fpermissive]
- 20. 將NSString轉換爲const char
- 21. 將NSString轉換爲const char *
- 22. 將const char *轉換爲int
- 23. 將UIImage轉換爲const char *?
- 24. 如何爲const WCHAR *轉換爲const char *
- 25. 如何爲const char *轉換爲const WCHAR *
- 26. 轉換的NSString爲unsigned char
- 27. 將byte * {aka unsigned char *}'轉換爲byte [32] {aka unsigned char [32]}
- 28. 如何將System :: String ^轉換爲const char *?
- 29. 如何將'wchar_t *'轉換爲'const char *'
- 30. 如何將CString轉換爲const char *?
除非您想要複製,'reinterpret_cast'聽起來像是正確的解決方案。 –
複製?在內容中?這正是我想要做的,除非我誤解你的問題。 – Louis93
順便說一句,C++不允許沒有'reinterpret_cast'的轉換的原因是如果'char'有符號而不是2的補碼,那麼對於負數'((unsigned char)* reinterpret_cast(a))!= * a ':也就是說,以char形式讀取數據與從'unsigned char'讀取數據不同。但是這個規則實際上是從C繼承而來的,因爲在C++中,圍繞非2的補碼存在問題,即IIRC意味着'char'需要是無符號的。無論如何,沒有非2的補充C++實現,或者至少沒有你會使用,所以已經注意到這一點,你可以忘記它... –