【问题标题】:How to decode the contents of a file in c#如何在c#中解码文件的内容
【发布时间】:2012-01-05 04:17:44
【问题描述】:

我在 .net 中读取了文件。这个文件是编码格式的。现在我必须解码文件。你能帮我在 C# 中如何做到这一点吗?

我的编码文件格式是

DARHnAyyakAALdDALdDALWGALY.AAAEQWAAAHQO
DARJMAyyakAALshALshALjEALoTAAAEA4AAAKcI
DARKwAyyakAAL2wAL2wALvkAL0VAAABJIAAAD$O
DARHnAyyvqAALXCALbkALUYALYXAAAD3MAAAHA6
DARJMAyyvqAALnXALrRALiwALmgAAAEmsAAAKUK
DARKwAyyvqAALzeAL3EALtdALxIAAABFYAAAEBC
DARHnAyzEwAALXlALXlALP7ALU7AAAEpMAAAG5Q
DARJMAyzEwAALlkALlkALeEALjYAAAGysAAAKTs

我必须在 c# 中解码这个文件。请帮帮我..我在 java 中有逻辑。但我不知道在 c# 中做什么。

private void update(String s){
int exp = decode(s.substring(1,5));
exp += 20000000;
int dt = decode(s.substring(5,11));
int op = decode(s.substring(11,15));
int hi = decode(s.substring(15,19));
int lo = decode(s.substring(19,23));
int cl = decode(s.substring(23,27));
int v = decode(s.substring(27,33));
int ni = decode(s.substring(33,39));
append(""+exp,dt, op/100.0f, hi/100.0f, lo/100.0f, cl/100.0f, v, ni);
}

private int decode(String s)
{
int n = 0;
for (int i = 0; i < s.length(); i++)
{
  int c = (int)s.charAt(i);
  if (c >= (int)'A' && c <= (int)'Z')
    c = c - (int)'A';
  else if (c >= (int)'a' && c <= (int)'z')
    c = c - (int)'a' + 26;
  else if (c >= (int)'0' && c <= (int)'9')
    c = c - (int)'0' + 52;
  else if (c == (int)'$')
    c = 62;
  else if (c == (int)'.')
    c = 63;
  else
    c = 0;
  n <<= 6;
  n += c;
}
return n;
}

【问题讨论】:

  • 所以你有一个文件'编码'(看起来像),允许你的猫在大写锁定的情况下四处走动,你想'解码'它来让猫出来?如果这不是您想要做的,那么请更具体。我的精神力量并不完美。
  • @Robert Allan 该文件已被编码,因为它不应该是可读格式。并且还可以减小文件大小。
  • @Dan 是的,我的文件已编码。现在我必须解码文件。现在该文件不可读。现在我希望读取该文件。为此我应该解码该文件。跨度>
  • “该文件被编码,因为它不应该是可读格式” - 加密是用来防止读取格式的。编码可能实现相同的结果,但它用于不同的目的。你确定你说的不是加密吗?
  • @Dan,很久以来我看到的最好的评论。 :)

标签: c# .net


【解决方案1】:

这几乎直接翻译成 c#:

   private void update(String s)
    {
        int exp = decode(s.Substring(1, 5));
        exp += 20000000;
        int dt = decode(s.Substring(5, 11));
        int op = decode(s.Substring(11, 15));
        int hi = decode(s.Substring(15, 19));
        int lo = decode(s.Substring(19, 23));
        int cl = decode(s.Substring(23, 27));
        int v = decode(s.Substring(27, 33));
        int ni = decode(s.Substring(33, 39));
        //append(""+exp,dt, op/100.0f, hi/100.0f, lo/100.0f, cl/100.0f, v, ni);
    }

    private int decode(String s)
    {
        int n = 0;
        for (int i = 0; i < s.Length; i++)
        {
            int c = (int)s[i];
            if (c >= (int)'A' && c <= (int)'Z')
                c = c - (int)'A';
            else if (c >= (int)'a' && c <= (int)'z')
                c = c - (int)'a' + 26;
            else if (c >= (int)'0' && c <= (int)'9')
                c = c - (int)'0' + 52;
            else if (c == (int)'$')
                c = 62;
            else if (c == (int)'.')
                c = 63;
            else
                c = 0;
            n <<= 6;
            n += c;
        }
        return n;
    }

我唯一不确定的是 append 语句。不确定这是否应该将数字相加或从中构建一个字符串。

假设它是一个字符串,它会是这样的:

        var sbText = new System.Text.StringBuilder(500);
        sbText.Append(exp).Append(dt).Append(op/100.0f).Append(hi/100.0f).Append(lo/100.0f).Append(cl/100.0f).Append(v).Append(ni);
        var sText = sbText.ToString();

【讨论】:

  • 你确定他的输入是哪种编码?
  • 完全不知道。似乎是一种本土加密。我刚刚使代码工作:)。
  • 解码函数似乎与您在某些 Base64Encoder 实现中看到的 CharToSixBit 函数非常相似。
猜你喜欢
  • 2012-04-22
  • 2015-08-22
  • 2020-02-22
  • 2020-07-14
  • 1970-01-01
  • 2021-08-02
  • 2020-03-09
  • 2021-09-19
  • 2011-01-28
相关资源
最近更新 更多