メール猫開発(2):メール受信後の復号化
at+cmgf=0//PDU方式でメールを受信するように設定
受信した情報:
+CMGR:0,,25 08 91 6831109,03305 F 0 20 D 91 683148625389 F 300//代表符号化方式7ビット符号化方式08:代表16ビット符号化方式61803051525023 05 E 8329 BFD 06 OK
受信した情報の復号化:
ここで、
受信した情報:
+CMGR:0,,25 08 91 6831109,03305 F 0 20 D 91 683148625389 F 300//代表符号化方式7ビット符号化方式08:代表16ビット符号化方式61803051525023 05 E 8329 BFD 06 OK
受信した情報の復号化:
///
/// 7
///
///
///
public String Decode7(String src)
{
StringBuilder sb = new StringBuilder();
int[] cs = new int[src.Length / 2];
//
int tmpout = 0;
for (int i = 0; i < src.Length / 2; i++)
{
if (int.TryParse(src.Substring(i * 2, /*i * 2 +*/ 2), System.Globalization.NumberStyles.AllowHexSpecifier, null, out tmpout))
{
cs[i] = tmpout;
}
}
int iLeft = 0;//
int iChar = 0;//
int tmp = 0;//
int j = 0;//
while (j < cs.Length)
{
tmp = ((cs[j] << iChar) & 0x7f) | iLeft;
sb.Append((char)tmp);
iLeft = cs[j] >> (7 - iChar);
j++;
iChar++;
if (iChar == 7)
{
sb.Append((char)iLeft);
iLeft = 0;
iChar = 0;
}
}
if (iLeft != 0)
sb.Append((char)iLeft);
return sb.ToString();
}
///
/// 16
///
///
///
public String Decode16(String src)
{
StringBuilder sb = new StringBuilder();
int tmp = 0;
for (int i = 0; i < src.Length / 4; i++)
{
if (int.TryParse(src.Substring(i * 4, /*(i + 1) * */ 4), System.Globalization.NumberStyles.AllowHexSpecifier, null, out tmp))
//tmp = Integer.parseInt(src.substring(i * 4, (i + 1) * 4), 16);
sb.Append((char)tmp);
}
return sb.ToString();
}
ここで、
System.Globalization.NumberStyles.AllowHexSpecifier
は、数値文字列が16進数値を表すことを示す.