partially fix big-endian build

samples are the next thing to tackle
This commit is contained in:
tildearrow 2022-08-19 00:23:45 -05:00
parent 7c42453422
commit 142c21e20b
4 changed files with 160 additions and 11 deletions

View file

@ -77,6 +77,85 @@ signed char SafeReader::readC() {
return (signed char)buf[curSeek++];
}
#ifdef TA_BIG_ENDIAN
short SafeReader::readS_BE() {
#ifdef READ_DEBUG
logD("SR: reading short %x:",curSeek);
#endif
if (curSeek+2>len) throw EndOfFileException(this,len);
short ret;
memcpy(&ret,&buf[curSeek],2);
#ifdef READ_DEBUG
logD("SR: %.4x",ret);
#endif
curSeek+=2;
return ret;
}
short SafeReader::readS() {
if (curSeek+2>len) throw EndOfFileException(this,len);
short ret;
memcpy(&ret,&buf[curSeek],2);
curSeek+=2;
return ((ret>>8)&0xff)|(ret<<8);
}
int SafeReader::readI_BE() {
#ifdef READ_DEBUG
logD("SR: reading int %x:",curSeek);
#endif
if (curSeek+4>len) throw EndOfFileException(this,len);
int ret;
memcpy(&ret,&buf[curSeek],4);
curSeek+=4;
#ifdef READ_DEBUG
logD("SR: %.8x",ret);
#endif
return ret;
}
int SafeReader::readI() {
if (curSeek+4>len) throw EndOfFileException(this,len);
unsigned int ret;
memcpy(&ret,&buf[curSeek],4);
curSeek+=4;
return (int)((ret>>24)|((ret&0xff0000)>>8)|((ret&0xff00)<<8)|((ret&0xff)<<24));
}
int64_t SafeReader::readL() {
if (curSeek+8>len) throw EndOfFileException(this,len);
unsigned char ret[8];
memcpy(ret,&buf[curSeek],8);
curSeek+=8;
return (int64_t)(ret[0]|(ret[1]<<8)|(ret[2]<<16)|(ret[3]<<24)|(ret[4]<<32)|(ret[5]<<40)|(ret[6]<<48)|(ret[7]<<56));
}
float SafeReader::readF() {
if (curSeek+4>len) throw EndOfFileException(this,len);
unsigned int ret;
memcpy(&ret,&buf[curSeek],4);
curSeek+=4;
ret=((ret>>24)|((ret&0xff0000)>>8)|((ret&0xff00)<<8)|((ret&0xff)<<24));
return *((float*)(&ret));
}
double SafeReader::readD() {
if (curSeek+8>len) throw EndOfFileException(this,len);
unsigned char ret[8];
unsigned char retB[8];
memcpy(ret,&buf[curSeek],8);
curSeek+=8;
retB[0]=ret[7];
retB[1]=ret[6];
retB[2]=ret[5];
retB[3]=ret[4];
retB[4]=ret[3];
retB[5]=ret[2];
retB[6]=ret[1];
retB[7]=ret[0];
return *((double*)retB);
}
#else
short SafeReader::readS() {
#ifdef READ_DEBUG
logD("SR: reading short %x:",curSeek);
@ -144,6 +223,7 @@ double SafeReader::readD() {
curSeek+=8;
return ret;
}
#endif
String SafeReader::readString(size_t stlen) {
String ret;