C# 用户输入到字节数组

Posted

技术标签:

【中文标题】C# 用户输入到字节数组【英文标题】:C# User Input Into Byte Array 【发布时间】:2016-06-26 02:51:24 【问题描述】:

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

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;

【问题讨论】:

您是否在寻找包含整数 22,101,1 或与 22 字节等效的 ascii 字节的数组。这将是 50,50(对于“22”)asciitable.com 我真正想要的是 byte[] arr = new Byte[] 22, 101, 1; 【参考方案1】:
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();   

【讨论】:

您的解决方案效果很好,非常感谢。我想知道是否可以修改 byte[] byteArr = text.Split(',').Select(x => Convert.ToByte(x)).ToArray();这样它将接受带有 + 符号的输入字符串。例如,1+2、3+6、33+2 ?【参考方案2】:

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

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

【讨论】:

【参考方案3】:

虽然其他答案解释了如何将 string 转换为 byte[], 我相信您真正想要的是将数字输入byte[]

var input = "22, 101, 1";
var numbers = input.Split(',')
                   .Select(p => byte.Parse(p));

这将在每个, 处拆分输入并将每个部分转换为整数。

【讨论】:

@un-lucky 或者,你知道,你可以自己修复它。这是一个社区网站,任何人都可以编辑任何帖子。【参考方案4】:

您可以使用 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
    

【讨论】:

以上是关于C# 用户输入到字节数组的主要内容,如果未能解决你的问题,请参考以下文章

C# 记录麦克风输入并将其存储在字节数组中,而不是本地存储

将文件加载为字节数组,而不在内存中分配它 C#

C#字节数组到字符串数组[重复]

用于 ScintillaNET 的字节数组到文本

C#从字节数组启动另一个WPF程序[重复]

从 c++ 到 c# 的 pinvoke 字节数组