PeekL Seems to give wrong answer?
Posted: Fri Jul 26, 2019 9:17 am
Attempting to get a 32 checksum from a buffer
After setting up the buffer I use 'Debug "Checksum = " + Str(PeekL(*SongBuffer + 22))'
The value returned is -1015688195
If I change to 'Debug "Checksum = " + Hex(PeekL(*SongBuffer + 22))'
The value returned is FFFFFFFFC375D3FD
The actual value should be C375D3FD
Other values are returned ok, am I missing something?
You will need an .ogg file to test.
The code I am using is here:-
I know it will be something I am not seeing.
CD
After setting up the buffer I use 'Debug "Checksum = " + Str(PeekL(*SongBuffer + 22))'
The value returned is -1015688195
If I change to 'Debug "Checksum = " + Hex(PeekL(*SongBuffer + 22))'
The value returned is FFFFFFFFC375D3FD
The actual value should be C375D3FD
Other values are returned ok, am I missing something?
You will need an .ogg file to test.
The code I am using is here:-
Code: Select all
Structure Head
Capture.s
Version.a
Type.a
GranPos.d
Serial.l
Sequence.l
Checksum.l
PageSegments.a
EndStructure
Global OggHeader.Head
FileToSearch.s = OpenFileRequester("Please choose file to load", "", "All Files (*.*)|*.*", 0)
If ReadFile(0, FileToSearch)
length = Lof(0)
*SongBuffer = AllocateMemory(length)
If *SongBuffer
bytes = ReadData(0, *SongBuffer, length)
EndIf
CloseFile(0)
EndIf
Debug "Capture Pattern = " + PeekS(*SongBuffer,4,#PB_UTF8)
Debug "Version = " + Str(PeekA(*SongBuffer + 4))
Debug "Type = " + Str(PeekA(*SongBuffer + 5))
Debug "Granule Position = " + Str(PeekD(*SongBuffer + 6))
Debug "Serial = " + Hex(PeekL(*SongBuffer + 14))
Debug "Sequence = " + Hex(PeekL(*SongBuffer + 18))
Debug "Checksum = " + Str(PeekL(*SongBuffer + 22))
Debug "Number Of Segments = " + Str(PeekA(*SongBuffer + 26))CD