在c#中将ASCII代码转换为orginalstring

时间:2014-09-22 11:40:33

标签: c# ascii converter typeconverter

我正在尝试转换String to ASCII代码,因此我使用此功能:

        public List<string> PrimaryCode(string OrginalStr)
        {
            List<string> lstResult = new List<string>();
            int lenOrginal = OrginalStr.Length;
            string subOrginalStr;
            byte[] AsciisubOrginalStr;
            int AC;

            for (int i = 0; i < lenOrginal; i++)
            {
                subOrginalStr = OrginalStr.Substring(i, 1);
                AsciisubOrginalStr = Encoding.ASCII.GetBytes(subOrginalStr);
                if (AsciisubOrginalStr[0] > 100)
                {
                    AC = Convert.ToInt32(AsciisubOrginalStr[0]);
                    lstResult.Add((AC ).ToString());
                }
                else
                {
                    AC = Convert.ToInt32(AsciisubOrginalStr[0]);
                    lstResult.Add((AC).ToString());
                }
            }
            return lstResult;
        }

我的项目的另一部分我需要将ASCII代码转换为原始文本,因为您可以看到我使用此功能:

   public List<string> PrimaryCodeRev(List<string> CodedStr)
{
    string res = "";
    foreach (string s in CodedStr)
    {
        res = res+s;
    }
    List<string> lstResult = new List<string>();
    int lenOrginal = res.Length;
    string subOrginalStr;
    byte[] AsciisubOrginalStr;
    int AC;

    for (int i = 0; i < lenOrginal; i++)
    {
        subOrginalStr = res.Substring(i, 1);
        AsciisubOrginalStr = Encoding.ASCII.GetBytes(subOrginalStr);
        if (AsciisubOrginalStr[0] < 100)
        {
            AC = Convert.ToInt32(AsciisubOrginalStr[0]);
            lstResult.Add((AC).ToString());
        }
        else
        {
            AC = Convert.ToInt32(AsciisubOrginalStr[0]);
            lstResult.Add((AC).ToString());
        }
    }
    return lstResult;
}

字符串输入hello

转换为ascii结果:

enter image description here

将ascii转换为正文:

enter image description here

但它不起作用,也不会返回正文。为什么?

2 个答案:

答案 0 :(得分:1)

你好像太复杂了......

如果您的输入字符串只包含ASCII字符(必须是必填字符),那么您可以按如下方式对其进行编码:

public static IEnumerable<string> ToDecimalAscii(string input)
{
    return input.Select(c => ((int)c).ToString());
}

您可以将其转换回类似字符串:

public static string FromDecimalAscii(IEnumerable<string> input)
{
    return new string(input.Select(s => (char)int.Parse(s)).ToArray());
}

将它组合成一个可编辑的控制台程序:

using System;
using System.Collections.Generic;
using System.Linq;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            string original = "hello";

            var encoded = ToDecimalAscii(original);

            Console.WriteLine("Encoded:");
            Console.WriteLine(string.Join("\n", encoded));

            Console.WriteLine("\nDecoded: " + FromDecimalAscii(encoded));
        }

        public static IEnumerable<string> ToDecimalAscii(string input)
        {
            return input.Select(c => ((int)c).ToString());
        }

        public static string FromDecimalAscii(IEnumerable<string> input)
        {
            return new string(input.Select(s => (char)int.Parse(s)).ToArray());
        }
    }
}

让我重申一下:如果您的输入字符串只保证包含ASCII集中的字符,那么这只会起作用。


这并没有真正回答你为什么要这样做的问题。如果您正在尝试对某些内容进行编码,则可能最好使用某种加密方法,该方法输出一个字节数组,并将该数组转换为基数为64。

This does look like an X-Y question to me.

答案 1 :(得分:-2)

获取Ascii代码只需执行以下操作。

byte[] asciiBytes = Encoding.ASCII.GetBytes(value);

对于来自AScii代码的字符串,

char c1 = (char) asciiCode;