Здравствуйте.
Пишу программу приема SMS приходящих на 3G модем.
SMS приходят в кодировке UCS-2 hex (это почти тоже самое, что и UTF-16)
Пример такой строки: 041F04400438043204350442
Помогите написать функцию перекодировки во что-нибудь читаемое.
Вроде тут есть пример; да на другом языке :(
Спасибо
$dec="0414043B044F0020043F0440043E043204350440043A0438002004310430043B0430043D04410430002004380441043F043E043B044C0437044304390442043500200441043B043504340443044E0449043804350020043104350441043F043B04300442043D044B04350020043A043E043C0430043D0434044B003A002004110430043B0430043D04410020002A0031003000300023002C0020041F043504400438043E04340438044704350441043A043804350020043F0430043A04350442044B0020002A003100300030002A00310023002C0020042004300437043E0432044B04350020043F0430043A04350442044B0020002A003100300030002A00320023002C0020041A044004350434043804420020002A003100300030002A00330023002C0020043104350441043F043B04300442043D044B0439002004370432043E043D043E043A0020043D043000200031003100310020002804340430043B0435043500200031002C002004340430043B04350435002000310029"$unicodetotext=_PDU_UCS2_ASCII($dec)ConsoleWrite("USC2 в ASCII -> "&$unicodetotext&@CRLF)Func_PDU_UCS2_ASCII($s);Преобразует UCS2 в строку.Local$resultFor$i=1ToStringLen($s)Step4$k=Dec(StringMid($s,$i,4))If$k=1025Then$k=168;ЁElseIf$k=1105Then$k=184;ёElseIf$k>=1040Then$k-=848;~ $k=$k-1040+192EndIf$result&=Chr($k)NextReturn$resultEndFunc
#cs ----------------------------------------------------------------------------
При 8-ми битовом кодировании применяется INTEL ASCII-HEX таблица и сообщение в таком случае не может содержать более 140 символов.
_PDU_ASCII_8bit($s) ;Кодирует сообщение
_PDU_8bit_ASCII($s) ;Декодирует сообщение
#ce----------------------------------------------------------------------------;~ $t="Privet";~ $code=_PDU_ASCII_8bit($t);~ $encode=_PDU_8bit_ASCII($code);~ ConsoleWrite($code & @CRLF);~ ConsoleWrite($encode & @CRLF)Func_PDU_ASCII_8bit($s)Local$resultFor$i=1ToStringLen($s)$result&=Hex(Asc(StringMid($s,$i,1)),2)NextReturn$resultEndFunc;==>_PDU_ASCII_8bitFunc_PDU_8bit_ASCII($s)Local$resultFor$i=1ToStringLen($s)Step2$result&=Chr("0x"&StringMid($s,$i,2))NextReturn$resultEndFunc;==>_PDU_8bit_ASCII
ИМХО, эти функции никому кроме тех кто отправляет/принимают SMS больше не нужны. Они, так сказать, узкоспециализированы. Но CreatoR может конечно добавить