C# 从文本框中获取数据并转换为指定格式的字节数组
如何将16个字符的输入转换为以下格式的字节数组。 例如,从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
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,但该标志不应由用户键入,而是应自动显示。这是应在另一个问题中提出的问题。