DataBuffers PeekByte() returns negative values
Monkey Forums/Monkey Bug Reports/DataBuffers PeekByte() returns negative values| 
 | ||
| Hi mark, don't know if this is a bug but this returns negative numbers: Strict Import brl.databuffer Function Main:Int() Local db:DataBuffer = New DataBuffer(1024) db.PokeByte(1, 252) Local i:int = db.PeekByte(1) Print i Return 0 End If this is by-design, would you consider providing a ReadUByte() Method for the databuffer? | 
| 
 | ||
| Sorry, I though it was already fixed but I run the wrong test case, this still exists in 81b | 
| 
 | ||
| You can easily read it as unsigned data by using a 'binary And' operation to mask out the relevant bits: Strict
Import brl.databuffer
Function Main:Int()
    Local db:DataBuffer = New DataBuffer(1024)
    Print "Byte:"
    db.PokeByte(1, 252)
    'db.PokeByte(1, -4)
    
    Print db.PeekByte(1)          ' Read  signed  Byte
    Print db.PeekByte(1) & $FF    ' Read unsigned Byte
    Print "Word/Short:"
    db.PokeShort(1, 65500)
    'db.PokeShort(1, -36)
    
    Print db.PeekShort(1)         ' Read  signed  Word
    Print db.PeekShort(1) & $FFFF ' Read unsigned Word
    Return 0
EndIt is good to have both ways. Read data and interpret it as signed and unsigned data. | 
| 
 | ||
| Well, If you tell me this is by design, could this at least be stated in the docs that the returned value is signed (maybe in bold)? Wouldn't have changed anything as I simply ported good ol' bmax code and I would have fallen for the same trap because all I did was copy&paste. The bit twiddling is not a problem the behaviour was simply extremly unexpected at the very moment I ported the code. | 
| 
 | ||
| All monkey integers are signed, there is no precedent anywhere for the use of unsigned in any of it's modules that I am aware of. Which particular blitzmax command are you talking about ph? | 
| 
 | ||
| Try: SuperStrict Local bank:TBank = CreateBank(1024) bank.PokeByte(1, 252) Print bank.PeekByte( 1) And compare it with the Monkey X version. This would be no problem for a few lines but if you try to port whole modules over things get ugly pretty fast when multiple things now work completely different. Debugging old code n' stuff.... | 
| 
 | ||
| I concur, docs need updating as byte is specifically signed in bmx and undefined in monkey. | 
| 
 | ||
| The reason it works like this is mainly because that's the way most targets natively implement the databuffer methods - ie: it's pretty much optimal. Adding PeekUByte etc wouldn't be too much of a hassle though - will think about it. |