【问题标题】:Convert ASCII code to orginalstring in c#在c#中将ASCII码转换为原始字符串
【发布时间】:2014-09-22 11:40:33
【问题描述】:

我正在尝试转换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结果:

将 ascii 转换为正文:

但它不起作用并且它不返回正文。为什么 ?

【问题讨论】:

  • 具体告诉我们它“不起作用”。
  • 顺便说一下,我只能看到这两种方法之间的一个区别(if 表达式)。你绝对应该考虑重构。
  • 好的,我会尽快添加结果
  • 最好将字符串转换为 UTF-8,然后对其进行 base64 编码
  • 不容易给出你问的问题。什么时候有助于理解是为什么你需要转换字符串。为什么不能按原样使用它。

标签: c# ascii converter typeconverter


【解决方案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.

【讨论】:

    【解决方案2】:

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

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

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

    char c1 = (char) asciiCode;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-27
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      • 1970-01-01
      相关资源
      最近更新 更多