Aşağıdaki gibi bir şey kullanıyorum. Daha iyi bir yolu var mı?Bir nesnenin bit sunumunu yazdırmanın bir yolu var mı?
for (int i = 0; i < sizeof(Person) ; i++) {
const char &cr = *((char*)personPtr + i);
cout << bitset<CHAR_BIT>(cr);
}
Aşağıdaki gibi bir şey kullanıyorum. Daha iyi bir yolu var mı?Bir nesnenin bit sunumunu yazdırmanın bir yolu var mı?
for (int i = 0; i < sizeof(Person) ; i++) {
const char &cr = *((char*)personPtr + i);
cout << bitset<CHAR_BIT>(cr);
}
Ben senin Person
sınıfta bir serialize_as_binary
yarar sağlamak için öneririm.
template<typename T>
void serialize_as_bin(const T &t, ostream& os) {
const unsigned char *p = reinterpret_cast<const unsigned char *>(&t);
for(size_t s = 0; s < sizeof t; ++s, ++p) serialize_as_bin(*p, os);
}
template<>
void serialize_as_bin(const unsigned char &t, ostream& os) {
// Code to serialize one byte
std::bitset<CHAR_BIT> x(t);
os << x;
}
struct Person {
A a;
B b;
ostream& serialize_as_binary(ostream& os) {
serialize_as_bin(a, os);
serialize_as_bin(b, os);
return os;
}
void deserialize_from_binary() {
// Similar stuff if required
...
}
};
Sanırım döngüde * (p + s) 'anlamına geldin. – Scis
@MohitJain Metodumdaki tehlike/varsayımlar hakkında biraz bilgi verebilir misiniz? Teşekkürler. –
'long' - char *' arasında değişiklik yaptığınızı fark etmedim. "Uzun" veya "uzun" ile sıkı takma sorunları yaşayabilirsiniz. –
Yasal Uyarı: Bu dolgu umursamayan basit ciddi olmayan bir çözüm olarak tasarlanmıştır. Bayt ve bitleri sağdan sola doğru yazdırır.
template<typename T>
void PrintBits(const T& o) {
for (size_t i = sizeof(o) - 1; i < sizeof(o); --i)
std::cout << std::bitset<CHAR_BIT>(reinterpret_cast<const unsigned char*>(&o)[i]);
}
'Person' doldurma bitlerini içerebilir. Sınıf Personeli '' serialize_as_binary' yöntemini kullanmak daha iyidir. Ayrıca, bu yöntemle ciltlenmiş belleği doldurabilirsiniz. Örneğin, '' '' '' '' '' '' '' '' '' '' 'uzun uzun'' sırasıyla 4 ve 8’dir. –
Sonuçlara bu dolgu eklenmez mi? kelimeyi kelimelere yazdırdığımdan beri? –
Ancak, dolgu uçları işe yaramaz ve kafa karıştırıcı olabilir. “Person” nesnelerini yazdırma, 2 farklı bit deseni basabilir. –