Mobile phone short information SMS development - code, decoding
1, English code
The default GSM character set is 7-bit encoding, the ASCII code is 8-bit encoding, and the encoding is converted to 7-bit encoding.
For example: 1234 After encoding 31d98c06
2 credit
8-bit codes 00110001 00110010 00110011 00110100
7-bit codes 00110001 11011001 10001100 00000110
As can be seen in an example, the BIT8 encoded by the ASCII8 bit is removed, and the last seven-bit encoding will move to the front, and the new 8-bit encoding is formed.
The following is the implementation code of C Builder:
String __stdcall encodeenglish (String InputStr)
{
INT N, LEN, CUR;
String Tempstr, Returnstr;
Unsigned char mid1 [2], mid2 [2];
Len = INPUTSTR.LENGTH ();
n = 0;
For (INT i = 1; i <= le; i )
{
IF (i
{Stracpy (MID1, INPUTSTR.SUBSTRING (I, 1) .c_str ()); STRCPY (MID2, INPUTSTR.SUBSTRING (i 1, 1) .c_str ()); CUR = (MID1 [0] >> N) ((MID2 [0] << (7-N)) & 0xFF);} else {structure (MID1, INPUTSTR.SUBSTRING (I, 1) .c_str ()); cur = (MID1 [0] >> N ) & 0x7f;} FMTSTR (Tempstr, "% 2.2X", arrayofconst ((CUR))); returnstr = returnstr Tempstr; n = (n 1)% 7; if (n == 0) i ;} return Returnstr;
2, English decoding is simply to convert 7-bit character encoding to 8 for character encoding below the implementation code of C Builder: int ReturnHex (int value) {switch (value) {cas 0: value = 0x7f; break; Case 1: Value = 0x3f; Break; Case 2: Value = 0x1f; Break; Case 3: Value = 0x0f; Break; Case 4: Value = 0x07; Break; Case 5: Value = 0x03; Break; Case 6: Value = 0x01; break; case 7: value = 0x00; break;} return value;} string __stdcall decodeenglish (string infutstr) {unsigned char INSTR [300]; char Outstr [300]; string str; int J = 0, i = 0 INT POINT = 0; int Temp; Memset (INSTR, 0, 301); MEMSET (Outstr, 0,301); for (int i = 0; i
{Str = "0x" inputstr.substring (i 1, 2); INSTR [I / 2] = start (STR);} while (j <= inputstr.length () / 2) {if (Point == 0) OUTSTR [I] = INSTR [J] & ReturnHex (Point); Else Outstr [I] = ((INSTR [J] & ReturnHex (POINT) <
> (8-point));
IF (POINT% 7 == 0 && Point! = 0) Point = 0; Else Point = Point 1; I ; J = I- (I / 8);
} Outstr [12] = ((INSTR [12] & 0x07) << 5) | (Instr [11] >> (8-5)); Return Ansistring (Outstr);} 3, Chinese code Chinese code is simpler, Converting the Chinese code of GB2312 into the code page for the cp936, which can be c builder implementation code string encodechinese (String INPUTSTR) {Int Cur; String Tempstr, Returnstr; WideString WS; Wchar_T MID [2]; WS = WIDESTRING (INPUTSTR); for (int i = 1; i <= ws.length (); i ) {wcscpy (MID, WS.SUBSTRING (I, 1) .c_bs ()); cur = mid [0]; FMTSTR (Tempstr, "% 4.4X", ArrayOfconst ((Cur))); Returnstr = Returnstr Tempstr;} Return Returnstr;} 4, Chinese decoding Unicode encoding of the code page as CP936 into the Chinese code of GB2312 can be Is C Builder implementation code string decodeChinese (String InputStr) {wchar_t buf [300]; for (int i = 0; i
{BUF [I / 4] = start ("0x" INPUTSTR.SUBSTRING (i 1, 4));} BUF [INPUTSTR.LENGTH () / 4] = 0; return widechartostring (buf);} Xue Changyu Changning @ YNMAIL.com redpower2004@21cn.com 2001-8-7