|
|
|
/***************************************************************************
|
|
|
|
kbytecodec.cpp - description
|
|
|
|
-------------------
|
|
|
|
begin : Mo Nov 29 2004
|
|
|
|
copyright : (C) 2004 by Friedrich W. H. Kossebau
|
|
|
|
email : Friedrich.W.H@Kossebau.de
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
* *
|
|
|
|
* This library is free software; you can redistribute it and/or *
|
|
|
|
* modify it under the terms of the GNU Library General Public *
|
|
|
|
* License version 2 as published by the Free Software Foundation. *
|
|
|
|
* *
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
// lib specific
|
|
|
|
#include "kbinarybytecodec.h"
|
|
|
|
#include "koctalbytecodec.h"
|
|
|
|
#include "kdecimalbytecodec.h"
|
|
|
|
#include "khexadecimalbytecodec.h"
|
|
|
|
|
|
|
|
using namespace KHE;
|
|
|
|
|
|
|
|
|
|
|
|
KByteCodec *KByteCodec::createCodec( KCoding C )
|
|
|
|
{
|
|
|
|
KByteCodec *Codec;
|
|
|
|
switch( C )
|
|
|
|
{
|
|
|
|
case DecimalCoding: Codec = new KDecimalByteCodec(); break;
|
|
|
|
case OctalCoding: Codec = new KOctalByteCodec(); break;
|
|
|
|
case BinaryCoding: Codec = new KBinaryByteCodec(); break;
|
|
|
|
case HexadecimalCoding:
|
|
|
|
default: Codec = new KHexadecimalByteCodec();
|
|
|
|
}
|
|
|
|
return Codec;
|
|
|
|
}
|
|
|
|
|
|
|
|
unsigned int KByteCodec::decode( unsigned char *Char, const TQString &Digits, uint Pos ) const
|
|
|
|
{
|
|
|
|
//kdDebug() << TQString("KByteCodec::decode(%1,%2)").tqarg(Digits).tqarg(Pos) << endl;
|
|
|
|
const uint P = Pos;
|
|
|
|
|
|
|
|
// remove leading 0s
|
|
|
|
while( Digits.at(Pos) == '0' ) { ++Pos; }
|
|
|
|
|
|
|
|
unsigned char C = 0;
|
|
|
|
unsigned int d = encodingWidth();
|
|
|
|
do
|
|
|
|
{
|
|
|
|
if( !appendDigit(&C,Digits.tqat(Pos)) )
|
|
|
|
break;
|
|
|
|
|
|
|
|
++Pos;
|
|
|
|
--d;
|
|
|
|
}
|
|
|
|
while( d > 0 );
|
|
|
|
|
|
|
|
*Char = C;
|
|
|
|
return Pos - P;
|
|
|
|
}
|