I'm experiencing some weird problem.
I've created a file, 2400 bytes long. Each bit in those bytes represents a (white/black) pixel.
I load the file like this:
but for some reason, the bytes are scrambled... I can't really identify the pattern of that disruption.
I've created the file in windows using C# and wrote it into a file using File.WriteAllBytes(). I analyzed it using C# too, and it was OK there.
Any ideas why it isn't OK in Objective C/Mac? Is there a difference in the way Mac and Windows read bytes?
or maybe NSData inserts some of its own bytes into the file's bytes?
I'm experiencing some weird problem.
I've created a file, 2400 bytes long. Each bit in those bytes represents a (white/black) pixel.
I load the file like this:
but for some reason, the bytes are scrambled... I can't really identify the pattern of that disruption.
I've created the file in windows using C# and wrote it into a file using File.WriteAllBytes(). I analyzed it using C# too, and it was OK there.
Any ideas why it isn't OK in Objective C/Mac? Is there a difference in the way Mac and Windows read bytes?
or maybe NSData inserts some of its own bytes into the file's bytes?
thanks
One quick thing to try, it sounds like
Code:
[NSData initWithContentsOfFile:path]
may be better to use, but I haven't tested it.
__________________
My Website: http://codeforyou.com/ Discussing anything iPhone, Programming, or just anything interesting.
What is the variable 'i' set to in the memcpy call? Does stepping through the code in the debugger glean any useful information?
Oh, sorry, the variable 'i' contains the [data length] value, which in this specific case is 2400.
The only thing I could tell from stepping through the code is that the problem is in the data I get from the file or in the way I access it (and not in the way I draw it to the screen).
Quote:
Originally Posted by Kalimba
It just occurred to me that maybe it's an endian issue you're seeing.
as far as I know, endian is only the way the system interpret two or more bytes into numbers. So if for example I have two bytes:
00110110 11110000
these bits will stay the same no matter what endian is used, and the only thing changed would be the number represented by those two bytes. So I can't really see how it would change anything for me since I'm reading the file as separate bytes and not as full integers. Am I wrong?
Maybe it's something in the way I access the bits?
Code:
NSInteger byteIndex = requestedBitIndex / 8;
NSInteger bitIndexInByte = requestedBitIndex & 7; //the bit index (0-7) in the byte
NSInteger mask = 128 >> bitIndexInByte; //I read the bits from left to right so I take the binary number 10000000 and roll it bitIndex times to the right
if(byteData[byteIndex] & mask != 0)
return YES;
else
return NO;
This is how I access the bits. is there something wrong here? does the endian change anything in here?
is there another reason why the data is scrambled?
The dataWithContentsOfFile method is a "static" class method, not an instance method, so no init/alloc is needed.
It just occurred to me that maybe it's an endian issue you're seeing.
Endianness was my first thought, but that would only apply to byte order, I.E: a 32-bit integer when stored in Big Endian vs Little Endian, if he's talking a purely byte data file, it doesn't have any endianness.
__________________
My Website: http://codeforyou.com/ Discussing anything iPhone, Programming, or just anything interesting.