【问题标题】:Decode GSM 7 bit in C#在 C# 中解码 GSM 7 位
【发布时间】:2019-03-02 07:49:02
【问题描述】:

我需要在 c# 中将 GSM 7 位解码为 ascii 字符串,以便我搜索并找到很多关于它的不同帖子,post 是其中之一,但它不是 c#。

任何人都可以分享一个可以将 GSM 7 位字符解码为 ASCII 字符串的 c# 代码。

谢谢。

【问题讨论】:

  • 你自己试过什么?我自己不了解 Python,但您链接的代码(尤其是已接受的答案)看起来非常简单,转换为 C# 应该不是什么大问题。
  • 我尝试将其转换为 c#,但没有给出预期的结果。
  • 然后编辑你的问题并展示你做了什么/发布你的 C# 代码。
  • 我遵循了一个非常简单的流程图,终于来解决我的问题。谢谢@ckuri

标签: c# decode


【解决方案1】:
  class GSM7BitDecoder
{
    // Basic Character Set
    private const string BASIC_SET =
            "@£$¥èéùìòÇ\nØø\rÅåΔ_ΦΓΛΩΠΨΣΘΞ\x1bÆæßÉ !\"#¤%&'()*+,-./0123456789:;<=>?" +
            "¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà";

    // Basic Character Set Extension 
    private const string EXTENSION_SET =
            "````````````````````^```````````````````{}`````\\````````````[~]`" +
            "|````````````````````````````````````€``````````````````````````";


    string[] BASIC_SET_ARRAY = BASIC_SET.Select(x => x.ToString()).ToArray();
    string[] EXTENSION_SET_ARRAY = EXTENSION_SET.Select(x => x.ToString()).ToArray();

    enum circle { Start=1, Complete=8 }

    string GetChar(string bin)
    {
        try
        {
            if (Convert.ToInt32(bin, 2).Equals(27))
              return EXTENSION_SET_ARRAY[Convert.ToInt32(bin, 2)];
            else
                return BASIC_SET_ARRAY[Convert.ToInt32(bin, 2)];
        }
        catch { return string.Empty; }
    }
    public string DecodeGSM7bit(string strGsm7bit)
    {

        var suffix = string.Empty;
        var septet = string.Empty;
        var CurSubstr = string.Empty;
        var counter = 1;
        List<string> septets = new List<string>();
        List<string> sectets = new List<string>();

        //Prepare Octets
        var octets = Enumerable.Range(0, strGsm7bit.Length / 2).Select(i => 
        {
           return Convert.ToString(Convert.ToInt64(strGsm7bit.Substring(i * 2, 2), 16), 2).PadLeft(8,'0');

        }).ToList();


        for (var index=0; index < octets.Count; index = index +1)
        {
            //Generate Septets
            septet = octets[index].Substring(counter);
            CurSubstr = octets[index].Substring(0, counter);

            if (counter.Equals((int)circle.Start))
                septets.Add(septet);
            else
                septets.Add(septet + suffix);

            //Organize Sectets
            sectets.Add(GetChar(septets[index]));

            suffix = CurSubstr;
            counter++;

            //Reset counter when the circle is complete.
            if (counter == (int)circle.Complete)
            {
                counter = (int)circle.Start;
                sectets.Add(GetChar(suffix));
            }

        }
        return string.Join("", sectets);
    }

【讨论】:

    猜你喜欢
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多