![](/img/trans.png)
[英]C# - Converting a string to a float array and ignoring special characters
[英]Converting special characters into 7 bit data for a PDU string in C#
我正在嘗試創建一個PDU編碼器,它要求我:
所有這些在使用時都可以正常工作:
ASCII = Convert.ToInt32(char)
Convert.ToString(ASCII, 2)
= 7位 SeptetToOctet(7bit)
= 8bit(我的功能) Convert.ToString(Convert.ToInt32(8bit, 2), 16).ToUpper()
(如果要轉換為僅1個字符,我要添加0) 現在出現了我的問題,當嘗試轉換特殊字符(如丹麥的“ø”)時,您會得到ASCII值248,使用Convert.ToString(248, 2)
11111000
Convert.ToString(248, 2)
得到11111000
(8位)。 因此,或者我需要知道如何強制將'ø'轉換為7位二進制文件,或者需要對SeptetToOctet轉換(此URL上的轉換)進行修訂,但是我現在對二進制和二進制轉換的了解還足夠多,如何正確處理。
丹尼爾
看這里:
http://www.dreamfabric.com/sms/default_alphabet.html
您需要轉換為0x0B或0x0C(取決於大小寫)
將7位GSM轉換為ASCII(您的編碼),反之亦然。 這將使您的生活更輕松。
這是delphi中的一個小示例(我知道OOP要求使用C#,但原理保持不變)
function CharsetLatin1ToGsm(v : string) : string;
var Ps,I : Integer;
Len : Integer;
c : Char;
begin
Result := '';
if v = '' then Exit;
Ps := 1;
Len := Length(v);
while Ps <= Len do
begin
c := v[Ps];
I := Latin1ToGsm[Byte(c)];
if I < 0 then
begin
Result := Result+#27+Chr(-I);
end
else
Result := Result+Chr(I);
Inc(Ps);
end;
end;
小說明:
v是原始輸入字符串。 每個字符將轉換為一個字節,該字節用作包含GSM字母副本的Latin1ToGsm數組的索引。 如果返回的值小於0,則表示我們有一個擴展字符(如€符號),這意味着您需要在前面發送一個轉義字符(0x027)。
編輯
這是一個說明如何在C#中執行此操作的鏈接: http : //codeglobe.blogspot.com/2009/02/sending-sms-in-cnet-using-gsm-modem-and.html
干杯!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.