C#用户输入字节数组

时间:2016-03-11 01:05:15

标签: c# arrays byte

这可能是一个非常荒谬的问题,但我无法弄清楚如何将用户的输入导入字节数组。由于用户输入始终是字符串格式,因此需要进行对话,但是他输入的数字在数组中必须相同。例如:

Console.Write("Enter a number: ");
string text = Console.ReadLine();

/* Lets assume the user entered 22, 101, 1
   How would I get those exact numbers in byte[]
*/

byte[] arr = new Byte[] {text};

更新:我期待得到的是

byte[] arr = new Byte[] {22, 101, 1};

4 个答案:

答案 0 :(得分:2)

Console.Write("Enter a number: ");
string text = Console.ReadLine();
byte[] byteArrayUTF= System.Text.Encoding.UTF8.GetBytes (text);
byte[] byteArrayASCII= System.Text.Encoding.ASCII.GetBytes (text);

您可以在此处找到有关UTF8 and ASCII

之间差异的更好解释
  

Unicode是ASCII的超集,数字0-128具有相同的值   意思是ASCII,因为它们具有Unicode。

(来自更新)我认为您实际上正在寻找将输入字符串(逗号分隔值)转换为字节数组。如果是这样你可以使用thm如下:

 string text = Console.ReadLine();
 byte[] byteArr = text.Split(',').Select(x => Convert.ToByte(x)).ToArray();   

答案 1 :(得分:1)

虽然其他答案解释了如何将$('#test12').click(function() { $('#narrative').fadeOut('fast'); $('#narrative').empty(); var numb1 = Math.floor(Math.random() * 4) + 1; var numb2 = Math.floor(Math.random() * 4) + 1; var numb3 = Math.floor(Math.random() * 4) + 1; var numb4 = Math.floor(Math.random() * 4) + 1; var numb5 = Math.floor(Math.random() * 4) + 1; var numb6 = Math.floor(Math.random() * 4) + 1; var numb7 = Math.floor(Math.random() * 4) + 1; var numb8 = Math.floor(Math.random() * 4) + 1; $("#sel1").val(numb1).change(); $("#sel2").val(numb2).change(); $("#sel3").val(numb3).change(); $("#sel4").val(numb4).change(); $("#sel5").val(numb5).change(); $("#sel6").val(numb6).change(); $("#sel7").val(numb7).change(); $("#sel8").val(numb8).change(); }); 转换为string,但是 我相信你真正想要的是将数字变成byte[]

byte[]

这将在每var input = "22, 101, 1"; var numbers = input.Split(',') .Select(p => byte.Parse(p)); 分割输入,并将每个部分转换为整数。

答案 2 :(得分:1)

这使用LINQ-to-Objects到"管道"从字符串到字符串数组到字节序列到字节数组:

var arr = text
    .Split(',')
    .Select(digits => Byte.Parse(digits))
    .ToArray();

答案 3 :(得分:0)

您可以使用GetBytes函数将字符串转换为字节。

byte[] arr = Encoding.ASCII.GetBytes(text)
byte[] arr = System.Text.UTF8Encoding.UTF8.GetBytes(text)
byte[] arr = Encoding.Unicode.GetBytes(text)

如果您正在寻找特定的编码类型,可以使用以下命令将其他标准编码类型转换为.NET提供的类型。

byte[] arr = GetStringEncoding(StringEncodingType.CHARSET_UTF_16BE_CODEPAGE).GetBytes(text);

public static Encoding GetStringEncoding(StringEncodingType type)
        {
             switch (type)
            {
                case StringEncodingType.ASCII:
                    return Encoding.ASCII;
                case StringEncodingType.Unicode:
                    return Encoding.Unicode;
                    //return Encoding.UTF7;
                case StringEncodingType.UTF8:
                    return Encoding.UTF8;
                //case StringEncodingType.CHARSET_UTF_16LE_CODEPAGE:// 1200, same as unicode
                case StringEncodingType.CHARSET_UTF_16BE_CODEPAGE:// 1201,
                case StringEncodingType.CHARSET_UTF_32LE_CODEPAGE:// 12000,
                case StringEncodingType.CHARSET_UTF_32BE_CODEPAGE:// 12001,
                case StringEncodingType.CHARSET_WINDOWS_1251_CODEPAGE:// 1251,
                case StringEncodingType.CHARSET_WINDOWS_1252_CODEPAGE:// 1252,
                case StringEncodingType.CHARSET_WINDOWS_1253_CODEPAGE:// 1253,
                case StringEncodingType.CHARSET_WINDOWS_1255_CODEPAGE:// 1255,
                case StringEncodingType.CHARSET_ISO_2022_JP_CODEPAGE:// 50220,
                case StringEncodingType.CHARSET_ISO_2022_CN_CODEPAGE:// 50227,
                case StringEncodingType.CHARSET_ISO_2022_KR_CODEPAGE:// 50225,
                case StringEncodingType.CHARSET_ISO_8859_5_CODEPAGE:// 28595,
                case StringEncodingType.CHARSET_ISO_8859_7_CODEPAGE:// 28597,
                case StringEncodingType.CHARSET_ISO_8859_8_CODEPAGE:// 28598,
                case StringEncodingType.CHARSET_BIG5_CODEPAGE:// 950,
                case StringEncodingType.CHARSET_GB18030_CODEPAGE:// 54936,
                case StringEncodingType.CHARSET_EUC_JP_CODEPAGE:// 20932,
                case StringEncodingType.CHARSET_EUC_KR_CODEPAGE:// 51949,
                case StringEncodingType.CHARSET_SHIFT_JIS_CODEPAGE:// 932,
                case StringEncodingType.CHARSET_IBM855_CODEPAGE:// 855,
                case StringEncodingType.CHARSET_IBM866_CODEPAGE:// 866,
                case StringEncodingType.CHARSET_KOI8_R_CODEPAGE:// 20866,
                case StringEncodingType.CHARSET_MACCYRILLIC_CODEPAGE:// 10007,
                case StringEncodingType.CHARSET_HZ_GB_2312_CODEPAGE:// 52936,
                //case StringEncodingType.CHARSET_X_ISO_10646_UCS_4_3412_CODEPAGE:// 12000, same as CHARSET_UTF_32LE_CODEPAGE
                //case StringEncodingType.CHARSET_X_ISO_10646_UCS_4_2143_CODEPAGE:// 12000, same as CHARSET_UTF_32LE_CODEPAGE
                case StringEncodingType.CHARSET_WINDOWS_874_CODEPAGE:// 874
                    return Encoding.GetEncoding((int)type);
                default:
                    throw new System.NotSupportedException("Error Missing String Encoding Type:" + type.ToString());
            }
        }



public enum StringEncodingType // the numbers are the codepage
    {
        Unknown = -1,
        ASCII = 20127,
        Unicode = 1200,
        UTF8 = 65001,
        //CHARSET_UTF_16LE_CODEPAGE = 1200,  same as unicode
        CHARSET_UTF_16BE_CODEPAGE = 1201,
        CHARSET_UTF_32LE_CODEPAGE = 12000,
        CHARSET_UTF_32BE_CODEPAGE = 12001,
        CHARSET_WINDOWS_1251_CODEPAGE = 1251,
        CHARSET_WINDOWS_1252_CODEPAGE = 1252,
        CHARSET_WINDOWS_1253_CODEPAGE = 1253,
        CHARSET_WINDOWS_1255_CODEPAGE = 1255,
        CHARSET_ISO_2022_JP_CODEPAGE = 50220,
        CHARSET_ISO_2022_CN_CODEPAGE = 50227,
        CHARSET_ISO_2022_KR_CODEPAGE = 50225,
        CHARSET_ISO_8859_5_CODEPAGE = 28595,
        CHARSET_ISO_8859_7_CODEPAGE = 28597,
        CHARSET_ISO_8859_8_CODEPAGE = 28598,
        CHARSET_BIG5_CODEPAGE = 950,
        CHARSET_GB18030_CODEPAGE = 54936,
        CHARSET_EUC_JP_CODEPAGE = 20932,
        CHARSET_EUC_KR_CODEPAGE = 51949,
        CHARSET_SHIFT_JIS_CODEPAGE = 932,
        CHARSET_IBM855_CODEPAGE = 855,
        CHARSET_IBM866_CODEPAGE = 866,
        CHARSET_KOI8_R_CODEPAGE = 20866,
        CHARSET_MACCYRILLIC_CODEPAGE = 10007,
        CHARSET_HZ_GB_2312_CODEPAGE = 52936,
        //CHARSET_X_ISO_10646_UCS_4_3412_CODEPAGE = 12000, same as CHARSET_UTF_32LE_CODEPAGE
        //CHARSET_X_ISO_10646_UCS_4_2143_CODEPAGE = 12000, same as CHARSET_UTF_32LE_CODEPAGE
        CHARSET_WINDOWS_874_CODEPAGE = 874
    }