C# 用户输入字节数组
C# User Input Into Byte Array
这可能是一个非常荒谬的问题,但我不知道如何将用户的输入导入字节数组。由于用户输入始终采用字符串格式,因此需要进行对话,但他输入的数字必须与数组中的数字相同。例如:
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};
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 is a superset of ASCII, and the numbers 0–128 have the same
meaning in ASCII as they have in Unicode.
(来自更新)我认为您实际上是在寻找将输入字符串(逗号分隔值)转换为字节数组的方法。如果是这样,你可以像下面这样使用 thm:
string text = Console.ReadLine();
byte[] byteArr = text.Split(',').Select(x => Convert.ToByte(x)).ToArray();
您可以使用 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
}
虽然其他答案解释了如何将 string
转换为 byte[]
,
我相信您真正想要的是将数字放入 byte[]
var input = "22, 101, 1";
var numbers = input.Split(',')
.Select(p => byte.Parse(p));
这将在每个 ,
拆分输入并将每个部分转换为整数。
这使用 LINQ-to-Objects 到 "pipeline" 从字符串到字符串数组到字节序列到字节数组:
var arr = text
.Split(',')
.Select(digits => Byte.Parse(digits))
.ToArray();
这可能是一个非常荒谬的问题,但我不知道如何将用户的输入导入字节数组。由于用户输入始终采用字符串格式,因此需要进行对话,但他输入的数字必须与数组中的数字相同。例如:
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};
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 is a superset of ASCII, and the numbers 0–128 have the same meaning in ASCII as they have in Unicode.
(来自更新)我认为您实际上是在寻找将输入字符串(逗号分隔值)转换为字节数组的方法。如果是这样,你可以像下面这样使用 thm:
string text = Console.ReadLine();
byte[] byteArr = text.Split(',').Select(x => Convert.ToByte(x)).ToArray();
您可以使用 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
}
虽然其他答案解释了如何将 string
转换为 byte[]
,
我相信您真正想要的是将数字放入 byte[]
var input = "22, 101, 1";
var numbers = input.Split(',')
.Select(p => byte.Parse(p));
这将在每个 ,
拆分输入并将每个部分转换为整数。
这使用 LINQ-to-Objects 到 "pipeline" 从字符串到字符串数组到字节序列到字节数组:
var arr = text
.Split(',')
.Select(digits => Byte.Parse(digits))
.ToArray();