簡體   English   中英

將特殊字符轉換為C#中PDU字符串的7位數據

[英]Converting special characters into 7 bit data for a PDU string in C#

我正在嘗試創建一個PDU編碼器,它要求我:

  1. 將字符串中的每個字符轉換為ASCII值
  2. 將ASCII值轉換為7位二進制
  3. 使用此方法 -將7位轉換為8位。 我通過獲取第一個septet,然后從下一個septet的末尾開始添加,直到第一個有8位(如url中所示),來實現此目的。 這基本上是貫穿始終的。
  4. 使用8位二進制文​​件,我可以將PDU字符串轉換為十六進制。

所有這些在使用時都可以正常工作:

  1. ASCII = Convert.ToInt32(char)
  2. Convert.ToString(ASCII, 2) = 7位
  3. SeptetToOctet(7bit) = 8bit(我的功能)
  4. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM