public override DecodedObject <object> decodeString(DecodedObject <object> decodedTag, Type objectClass, ElementInfo elementInfo, Stream stream) { if (!PERCoderUtils.is7BitEncodedString(elementInfo)) { return(base.decodeString(decodedTag, objectClass, elementInfo, stream)); } else { DecodedObject <object> result = new DecodedObject <object>(); int strLen = decodeLength(elementInfo, stream); if (strLen <= 0) { result.Value = ""; } else { BitArrayInputStream bitStream = (BitArrayInputStream)stream; // 7-bit decoding of string byte[] buffer = new byte[strLen]; for (int i = 0; i < strLen; i++) { buffer[i] = (byte)bitStream.readBits(7); } result.Value = new string(ASCIIEncoding.ASCII.GetChars(buffer)); } return(result); } }
public override int encodeString(System.Object obj, System.IO.Stream stream, ElementInfo elementInfo) { if (!PERCoderUtils.is7BitEncodedString(elementInfo)) { return(base.encodeString(obj, stream, elementInfo)); } else { int resultSize = 0; byte[] val = System.Text.ASCIIEncoding.ASCII.GetBytes((string)obj); resultSize = encodeLength(val.Length, elementInfo, stream); if (val.Length == 0) { return(resultSize); } BitArrayOutputStream bitStream = (BitArrayOutputStream)stream; // 7-bit encoding of string for (int i = 0; i < val.Length; i++) { bitStream.writeBits(val[i], 7); } return(resultSize); } }