可能重複:
C++ style cast from unsigned char * to const char *無法從「無符號字符*」轉換成「字符*」
我有unsigned char* digest;
這是一個程序的輸出,我想將它傳遞給char* S1;
I型char* S1=digest;
並且不起作用
可能重複:
C++ style cast from unsigned char * to const char *無法從「無符號字符*」轉換成「字符*」
我有unsigned char* digest;
這是一個程序的輸出,我想將它傳遞給char* S1;
I型char* S1=digest;
並且不起作用
這是因爲unsigned char
和char
(在編譯器中確實是signed char
)是不同的。你必須做一個明確的類型轉換:
char* S1 = reinterpret_cast<char*>(digest);
它也會發生在'char'未簽名的實現上。三種字符類型*總是*三種不同的類型,並且在它們之間不存在任何隱式轉換,儘管在它們中的三種中僅保證兩種不同的表示。它會阻止你無意中編寫代碼,這取決於char是否已簽名,或者是否有符號整數具有表示形式 - 您只能通過強制轉換故意寫入該代碼。 –
這個工作非常感謝 – Hashed
我想強調的是,char,signed char和unsigned char實際上是三種不同的類型。 – sellibitze
字符類型是佈局兼容的,所以如果你知道你在做什麼,你可以簡單地強制指針與重新詮釋投:
char * s1 = reinterpret_cast<char *>(digest);
的答案很簡單:你需要將其強制轉換:reinterpret_cast<unsigned char*>(digest)
然而,在這種情況下,你需要知道的是無符號的char *與char *是不是真的一樣的東西,除非陣列中的所有元素都小於128
字符*或者表示從-128到127(簽名)或0至255的值(無符號), 對方總是值從0到255
消化其本質的功能是有可能爲0和之間返回值255,包括在內。
此外,數組可能包含空字符(問題並未真正指定摘要來自何處),因此許多接受char *或unsigned char *的函數可能會失敗,因爲它們假定字符*是一個字符串(這是不是真的,如果是(大概)固定大小的二進制摘要)
空調風格轉換:s1=( char *)digest;
C++風格的轉換:s1= reinterpret_cast<char *>(digest);
#include <iostream>
using namespace std ;
int main(void)
{
unsigned char* digest;
char * s1c,*s1cpp;
//C style cast
s1c=( char *)digest;
//C++ style cast
s1cpp= reinterpret_cast<char *>(digest);
cout<<" \nPress any key to continue\n";
cin.ignore();
cin.get();
return 0;
}
類型是不同的這並不奇怪,它不起作用。問題是:你真的需要將'S1'聲明爲'char *'嗎?爲什麼不使用'unsigned char *'? –
你見過http://stackoverflow.com/questions/658913/c-style-cast-from-unsigned-char-to-const-char? – wmorrison365
其實我有一個函數,它需要作爲輸入參數char *和輸出無符號字符* ...我想再次輸入到函數的輸出再次,所以我需要的類型字符* ... – Hashed