Sadece uint8_t dizilimimi uint64_t ile birleştirmek istiyorum. Aslında, problemimi çözdüm ama sebebini anlamak gerekiyor. İşte benim kodum; İstediğimi olduğunuNeden "uint8_t" yerine "uint64_t" * * sola kaydırma yapmalıyım?
uint8_t byte_array[5];
byte_array[0] = 0x41;
byte_array[1] = 0x42;
byte_array[2] = 0x43;
byte_array[3] = 0x44;
byte_array[4] = 0x45;
cout << "index 0: " << byte_array[0] << " index 1: " << byte_array[1] << " index 2: " << byte_array[2] << " index 3: " << byte_array[3] << " index 4: " << byte_array[4] << endl;
/* This does not work */
uint64_t reverse_of_value = (byte_array[0] & 0xff) | ((byte_array[1] & 0xff) << 8) | ((byte_array[2] & 0xff) << 16) | ((byte_array[3] & 0xff) << 24) | ((byte_array[4] & 0xff) << 32);
cout << reverse_of_value << endl;
/* this works fine */
reverse_of_value = (uint64_t)(byte_array[0] & 0xff) | ((uint64_t)(byte_array[1] & 0xff) << 8) | ((uint64_t)(byte_array[2] & 0xff) << 16) | ((uint64_t)(byte_array[3] & 0xff) << 24) | ((uint64_t)(byte_array[4] & 0xff) << 32);
cout << reverse_of_value << endl;
ilk çıkış "44434245" olacak ve ikincisi "4544434241" olacaktır. Bunun beni alakasız bir sonuç verir döküm kullanmak istemiyorsanız ben kod uint64_t için her bayt döküm kullandığınızda gördüğümüz Yani olarak
Ancak çalışır. Sebebini açıklayan var mı?
Size 64 bit genişliğinde veri türüne upcasting önce-shift terk ettiğinde, bitleri sadece kayıp veya bozuk olsun olabilir. –
's/olabilir ve/ErikAlapää @ 0 –
: Hiç ihtiyacı; soru bir tane içerir. Ayrıca, bu bir "upcast" değil; Belirli bir terim istiyorsanız, bu "genişleyen bir dönüşüm" dir. –