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# 用户输入到字节数组的主要内容,如果未能解决你的问题,请参考以下文章