Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public int WriteUTF(string str)
- {
- int strlen = str.Length;
- int utflen = 0;
- int c, count = 0;
- for(int i = 0; i < strlen; i++)
- {
- c = str.ToCharArray()[i];
- if((c >= 0x0001) && (c <= 0x007F))
- {
- utflen++;
- }
- else if(c > 0x07FF)
- {
- utflen += 3;
- }
- else
- {
- utflen += 2;
- }
- }
- if(utflen > 65535)
- {
- throw new Exception("Encoded string is too long: " + utflen + " bytes");
- }
- byte[] bytearr = null;
- bytearr = new byte[(utflen*2) + 2];
- bytearr[count++] = (byte) (((uint)utflen >> 8) & 0xFF);
- bytearr[count++] = (byte) (((uint)utflen >> 0) & 0xFF);
- int x = 0;
- for(x = 0; x < strlen; x++)
- {
- c = str.ToCharArray()[x];
- if (!((c >= 0x0001) && (c <= 0x007F))) break;
- bytearr[count++] = (byte)c;
- }
- for(;x < strlen; x++)
- {
- c = str.ToCharArray()[x];
- if ((c >= 0x0001) && (c <= 0x007F))
- {
- bytearr[count++] = (byte)c;
- }
- else if (c > 0x07FF)
- {
- bytearr[count++] = (byte) (0xE0 | ((c >> 12) & 0x0F));
- bytearr[count++] = (byte) (0x80 | ((c >> 6) & 0x3F));
- bytearr[count++] = (byte) (0x80 | ((c >> 0) & 0x3F));
- }
- else
- {
- bytearr[count++] = (byte) (0xC0 | ((c >> 6) & 0x1F));
- bytearr[count++] = (byte) (0x80 | ((c >> 0) & 0x3F));
- }
- }
- ClientOutput.Write (bytearr, 0, utflen+2);
- return utflen + 2;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement