İmzasız int'ye 32 bitlik bir değer koymak istiyorum. Bu programın 32 ve 64 bit int ile platfromlarda ve hem küçük hem de büyük endianlarla çalışmasını istiyorum. İşte bu büyük endnian ile ve 32 ve 64 bit tamsayı türleri ile çalışmak için gidiyor düşünüyorum kodum32 bit, birim dönüştürülecek C++ içinde
void uCHarToInt(unsigned char* input, unsigned int* oputput)
{
memcpy(oputput, reinterpret_cast<unsigned int*>(&input), 4);
if (sizeof(unsigned int) == 8)
{
*oputput >>= 32;
}
}
, ama küçük endian hakkında emin değilim ve nasıl memcpy farklı platformlarda davranırlar yok. Daha iyi bir çözüm yok mu? daha iyi bir çözüm
sizce neden kelime boyutu veya alıcı konağın endian-lik olursa olsun, doğru dönüşüm gerçekleştirecek Burada yeniden yorumlama yapman gerekiyor mu? Neden tam olarak istediğiniz boyuta sahip olacak şekilde 'uint32_t' kullanmıyorsunuz? –
Bazı eski kodları yeniden kullandım ve ID bu yazıyı kullanmam için bana tavsiyede bulunsun .. ve imzasız inters döndüren işlevlerim var, ama onları değiştirmek daha iyi görünüyor ... bu yüzden tüm platformlarda çalışacak mıyım? void uCHarToInt (işaretsiz char * girişi, uint32_t * oputput) { \t memcpy (oputput, giriş, 4); } –
Kodu unutun. Neyi başarmak istediğinizi belirtmeden, neyi başarmak istediğinizi tanımlayın. Çünkü açıkça, kod en az söylemek garip. – gnasher729