public byte[] GetAsBytes() { switch (this.valueType) { case MsgPackType.Integer: return(BitConverter.GetBytes((Int64)this.innerValue)); case MsgPackType.String: return(BytesTools.GetUtf8Bytes(this.innerValue.ToString())); case MsgPackType.Float: return(BitConverter.GetBytes((Double)this.innerValue)); case MsgPackType.Single: return(BitConverter.GetBytes((Single)this.innerValue)); case MsgPackType.DateTime: long dateval = ((DateTime)this.innerValue).ToBinary(); return(BitConverter.GetBytes(dateval)); case MsgPackType.Binary: return((byte[])this.innerValue); default: return(new byte[] { }); } }
public static void WriteString(Stream ms, String strVal) { // //fixstr stores a byte array whose length is upto 31 bytes: //+--------+========+ //|101XXXXX| data | //+--------+========+ // //str 8 stores a byte array whose length is upto (2^8)-1 bytes: //+--------+--------+========+ //| 0xd9 |YYYYYYYY| data | //+--------+--------+========+ // //str 16 stores a byte array whose length is upto (2^16)-1 bytes: //+--------+--------+--------+========+ //| 0xda |ZZZZZZZZ|ZZZZZZZZ| data | //+--------+--------+--------+========+ // //str 32 stores a byte array whose length is upto (2^32)-1 bytes: //+--------+--------+--------+--------+--------+========+ //| 0xdb |AAAAAAAA|AAAAAAAA|AAAAAAAA|AAAAAAAA| data | //+--------+--------+--------+--------+--------+========+ // //where //* XXXXX is a 5-bit unsigned integer which represents N //* YYYYYYYY is a 8-bit unsigned integer which represents N //* ZZZZZZZZ_ZZZZZZZZ is a 16-bit big-endian unsigned integer which represents N //* AAAAAAAA_AAAAAAAA_AAAAAAAA_AAAAAAAA is a 32-bit big-endian unsigned integer which represents N //* N is the length of data byte[] rawBytes = BytesTools.GetUtf8Bytes(strVal); byte[] lenBytes = null; int len = rawBytes.Length; byte b = 0; if (len <= 31) { b = (byte)(0xA0 + (byte)len); ms.WriteByte(b); } else if (len <= 255) { b = 0xD9; ms.WriteByte(b); b = (byte)len; ms.WriteByte(b); } else if (len <= 65535) { b = 0xDA; ms.WriteByte(b); lenBytes = BytesTools.SwapBytes(BitConverter.GetBytes((Int16)len)); ms.Write(lenBytes, 0, lenBytes.Length); } else { b = 0xDB; ms.WriteByte(b); lenBytes = BytesTools.SwapBytes(BitConverter.GetBytes((Int32)len)); ms.Write(lenBytes, 0, lenBytes.Length); } ms.Write(rawBytes, 0, rawBytes.Length); }