char[]
- unsigned char*
ürününü dönüştürmenin bir yolu var mı? Teknik olarak% 100 yasal olmasa bileChar dizisini unsigned char'e dönüştürme *
char buf[50] = "this is a test";
unsigned char* conbuf = // what should I add here
char[]
- unsigned char*
ürününü dönüştürmenin bir yolu var mı? Teknik olarak% 100 yasal olmasa bileChar dizisini unsigned char'e dönüştürme *
char buf[50] = "this is a test";
unsigned char* conbuf = // what should I add here
bu reinterpret_cast<unsigned char*>(buf)
çalışacaktır.
bu% 100 teknik yasal değildir nedeni bir nesne için bir işaretçi açıkça bir nesne için bir işaretçi dönüştürülebilir 7.
bölüm 5.2.10
expr.reinterpret.cast
kurşun nedeniyle farklı tip. Orijinal tür, orijinal işaretçi değerini verir, böyle bir işaretçi dönüşümü sonucu belirtilmemiş.
Ki bu *reinterpret_cast<unsigned char*>(buf) = 'a'
belirtilmemiş ama *reinterpret_cast<char*>(reinterpret_cast<unsigned char*>(buf)) = 'a'
Tamam olduğu anlamına götürmek.
Sadece dökün?
unsigned char *conbuf = (unsigned char *)buf;
Eğer standardı doğru olarak hatırlarsam, herhangi bir türdeki bir nesnenin belleğine erişmek için [[un] imzalı] char işaretçisini kullanmak yasal olduğunu belirten bir istisna vardır. Kodunuzun davranışını iyi tanımlanmış olduğunu düşünüyorum. – HolyBlackCat
@HolyBlackCat Ben böyle bir ifadeyi hatırlamıyorum, bir referans sunabilirseniz, cevabı güncelleyeceğim. – Motti
Şüphesiz, standart bir referans bulamıyorum. Fakat SO üzerinde bazı iddialar buldum: char * 'için katı takma kuralının bir istisnası var (bu, herhangi bir türdeki bir nesnenin belleğine erişmek için [[un] imzalı işaretçiyi kullanmanın yasal olduğu anlamına gelir) "). Bkz: http://stackoverflow.com/a/99010/2752075 'Takma ad <...> için char * kullanabilirsiniz. Kurallar char * için bir istisna sağlar (imzalı char ve imzasız char dahil). Her zaman diğer türlerin taklit edildiği varsayılır. Ancak bu başka bir şekilde işe yaramaz: yapınızın takma adının C++ 'da – HolyBlackCat