Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从文本框中获取数据并转换为指定格式的字节数组_C#_Winforms - Fatal编程技术网

C# 从文本框中获取数据并转换为指定格式的字节数组

C# 从文本框中获取数据并转换为指定格式的字节数组,c#,winforms,C#,Winforms,如何将16个字符的输入转换为以下格式的字节数组。 例如,从textBox.Text=4A4DE68782847D37B到 byte[] esk_bytearr = { 0x4a, 0x4d, 0xe6, 0x87, 0x82, 0x47, 0xd3, 0x7b }; 我使用的方法无效,如下所示 static byte[] GetBytes(string str) { byte[] bytes = new byte[str.Length * sizeof(char)]; Syst

如何将16个字符的输入转换为以下格式的字节数组。 例如,从
textBox.Text=4A4DE68782847D37B

byte[] esk_bytearr = { 0x4a, 0x4d, 0xe6, 0x87, 0x82, 0x47, 0xd3, 0x7b };
我使用的方法无效,如下所示

static byte[] GetBytes(string str)
{
    byte[] bytes = new byte[str.Length * sizeof(char)];
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
    return bytes;
}
字节数组是使用DES的解密方法的输入。该方法正在工作,但解密的消息与我直接使用esk_bytearr作为解密方法的参数时不同。
谢谢

您正在寻找一种从十六进制字符串转换为字节数组的方法。关于堆栈溢出,已经回答过几次了。例如:


使用循环遍历每个十六进制对,使用
Convert.ToByte
指定
base16
将其转换为
字节

var hex = @"4a4de6878247d37b";
int hexLength = hex.Length;
byte[] bytes = new byte[hexLength / 2];
for (int i = 0; i < hexLength; i += 2)
{
    bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
}
var hex=@“4A4DE687828247B”;
int hexLength=十六进制长度;
字节[]字节=新字节[hexLength/2];
对于(int i=0;i
这很好,但是我真的不明白为什么除数是以字节[I/2]为单位的,是否有一种方法可以在用户输入产品密钥时,在每输入4个字符后自动显示-sign,否则会使填充字节数组时的事情变得复杂。您需要在
字节[I/2]中使用除数
因为我们每次将
i
增加2-十六进制字符串的长度为16,字节数组的长度为8。如果我理解您的第二个问题,您希望用户在每4次之后输入一个
-
。如何做到这一点取决于您在开发什么,但是当用户完成后,您可以执行
hex=hex.Replace(“-”,”)以摆脱它们。感谢您的解释。关于第二个问题,我的意思是当用户输入文本时,程序会在每四个字符后自动添加一个-符号。例如XXXX-XXXX-XXXX-XXXX,但该标志不应由用户键入,而是应自动显示。这是应在另一个问题中提出的问题。