L
LiloLilo
Hi all,
the following function writes n bits data to file. Parameter named
'Data' contains the value to be written, 'Length' contains the number
of bits of 'Data' to write. This function uses a static buffer named
BitBuffer to store bits between calls. When BitBuffer is full it is
written to file.
void WriteBitsToFile(unsigned Data, unsigned Length, std:fstream &
OutFile) {
static unsigned BitBuffer = 0; static unsigned BitCounter = 0;
for (unsigned i = Length; i --; ) {
(BitBuffer <<= 1) |= ((Data >> i) & 0x1); BitCounter ++;
if (BitCounter == 32) { OutFile.write((char *) & BitBuffer,
sizeof(BitBuffer)); BitCounter = 0; }
}
TotalBitCounter += Length;
}
The function works fine, but if I change 'Data' to a templated
variable, BitBuffer gets flushed to 0 at every call, so it does not
retains values between calls. Please note that calls are made always
with the same type for T2 (int) so if I am not wrong it would retain
the value but it doesn't. Why?
template <typename T2> void WriteBitsToFile(T2 Data, unsigned Length,
std:fstream & OutFile) {
static unsigned BitBuffer = 0; static unsigned BitCounter = 0;
for (unsigned i = Length; i --; ) {
(BitBuffer <<= 1) |= ((Data >> i) & 0x1); BitCounter ++;
if (BitCounter == 32) { OutFile.write((char *) & BitBuffer,
sizeof(BitBuffer)); BitCounter = 0; }
}
TotalBitCounter += Length;
}
Thank you all for help.
the following function writes n bits data to file. Parameter named
'Data' contains the value to be written, 'Length' contains the number
of bits of 'Data' to write. This function uses a static buffer named
BitBuffer to store bits between calls. When BitBuffer is full it is
written to file.
void WriteBitsToFile(unsigned Data, unsigned Length, std:fstream &
OutFile) {
static unsigned BitBuffer = 0; static unsigned BitCounter = 0;
for (unsigned i = Length; i --; ) {
(BitBuffer <<= 1) |= ((Data >> i) & 0x1); BitCounter ++;
if (BitCounter == 32) { OutFile.write((char *) & BitBuffer,
sizeof(BitBuffer)); BitCounter = 0; }
}
TotalBitCounter += Length;
}
The function works fine, but if I change 'Data' to a templated
variable, BitBuffer gets flushed to 0 at every call, so it does not
retains values between calls. Please note that calls are made always
with the same type for T2 (int) so if I am not wrong it would retain
the value but it doesn't. Why?
template <typename T2> void WriteBitsToFile(T2 Data, unsigned Length,
std:fstream & OutFile) {
static unsigned BitBuffer = 0; static unsigned BitCounter = 0;
for (unsigned i = Length; i --; ) {
(BitBuffer <<= 1) |= ((Data >> i) & 0x1); BitCounter ++;
if (BitCounter == 32) { OutFile.write((char *) & BitBuffer,
sizeof(BitBuffer)); BitCounter = 0; }
}
TotalBitCounter += Length;
}
Thank you all for help.