从字符串转换为字节
Converting from string to byte
我有一个字符串 40FA
。我想对它执行 XOR 运算,return 一个字节,在这种情况下是 0xBA
。但是,我只能在字符串中得到 BA
。当我将 BA
转换为字节时,我得到 186
。
string tmp = "40FA";
int uid_1 = Convert.ToInt32(tmp.Substring(0, 2), 16);
int uid_2 = Convert.ToInt32(tmp.Substring(2, 2), 16);
int test = uid_1 ^ uid_2 ;
string final = test.ToString("X");
byte byteresult = Byte.Parse(final , NumberStyles.HexNumber);
尝试:
byte[] toBytes = Encoding.ASCII.GetBytes(somestring);
and for bytes to string
string something = Encoding.ASCII.GetString(toBytes);
您的输入好像是十六进制值,需要将两位数字解析为一个字节。然后对这两个字节进行异或。
结果是十进制的 186
或十六进制的 BA
。这是相同的值,只是另一个
基地.
string tmp = "40FA";
byte uid_1 = byte.Parse(tmp.Substring(0, 2), NumberStyles.HexNumber);
byte uid_2 = byte.Parse(tmp.Substring(2, 2), NumberStyles.HexNumber);
byte test = (byte)(uid_1 ^ uid_2); // = 186 (decimal) = BA (hexadecimal)
string result = test.ToString("X");
我觉得这里有点误会。你实际上已经解决了你的问题。计算机不关心数字是十进制、十六进制、八进制还是二进制。这些只是数字的表示。所以只有你关心它是如何显示的。
正如 DmitryBychenko 所说:
0xBA 与 186 是相同的数字。如果你想将它存储在那里,它对你的字节数组无关紧要。如果您想显示它,它只对您作为用户很重要。
编辑:您可以通过 运行 这行代码进行测试:
Console.WriteLine((byteresult == Convert.ToInt32("BA", 16)).ToString());
如果我从您的评论中正确理解了您的意思,那么您的代码实际上可以满足您的要求。
string tmp = "40FA";
int uid_1 = Convert.ToInt32(tmp.Substring(0, 2), 16);
int uid_2 = Convert.ToInt32(tmp.Substring(2, 2), 16);
int test = uid_1 ^ uid_2 ;
string final = test.ToString("X");
// here you actually have achieved what you wanted.
byte byteresult = Byte.Parse(final , NumberStyles.HexNumber);
现在您可以使用 byteresult
将其存储在 byte[]
中,并且:
byte[] MyByteArray = new byte[4];
MyByteArray [0] = byteresult;
执行应该没有问题。
尝试调用该函数,它会将 string
转换为 bytes
private byte[] String_To_Bytes2(string strInput)
{
int numBytes = (strInput.Length) / 2;
byte[] bytes = new byte[numBytes];
for (int x = 0; x < numBytes; ++x)
{
bytes[x] = Convert.ToByte(strInput.Substring(x * 2, 2), 16);
}
return bytes;
}
static void Main(string[] args)
{
string tmp = "40FA";
int uid_1 = Convert.ToInt32(tmp.Substring(0, 2), 16);
int uid_2 = Convert.ToInt32(tmp.Substring(2, 2), 16);
int test = uid_1 ^ uid_2;
string final = test.ToString("X");
byte[] toBytes = String_To_Bytes2(final);
Console.WriteLine(toBytes);
Console.ReadKey();
}
我有一个字符串 40FA
。我想对它执行 XOR 运算,return 一个字节,在这种情况下是 0xBA
。但是,我只能在字符串中得到 BA
。当我将 BA
转换为字节时,我得到 186
。
string tmp = "40FA";
int uid_1 = Convert.ToInt32(tmp.Substring(0, 2), 16);
int uid_2 = Convert.ToInt32(tmp.Substring(2, 2), 16);
int test = uid_1 ^ uid_2 ;
string final = test.ToString("X");
byte byteresult = Byte.Parse(final , NumberStyles.HexNumber);
尝试:
byte[] toBytes = Encoding.ASCII.GetBytes(somestring);
and for bytes to string
string something = Encoding.ASCII.GetString(toBytes);
您的输入好像是十六进制值,需要将两位数字解析为一个字节。然后对这两个字节进行异或。
结果是十进制的 186
或十六进制的 BA
。这是相同的值,只是另一个
基地.
string tmp = "40FA";
byte uid_1 = byte.Parse(tmp.Substring(0, 2), NumberStyles.HexNumber);
byte uid_2 = byte.Parse(tmp.Substring(2, 2), NumberStyles.HexNumber);
byte test = (byte)(uid_1 ^ uid_2); // = 186 (decimal) = BA (hexadecimal)
string result = test.ToString("X");
我觉得这里有点误会。你实际上已经解决了你的问题。计算机不关心数字是十进制、十六进制、八进制还是二进制。这些只是数字的表示。所以只有你关心它是如何显示的。
正如 DmitryBychenko 所说: 0xBA 与 186 是相同的数字。如果你想将它存储在那里,它对你的字节数组无关紧要。如果您想显示它,它只对您作为用户很重要。
编辑:您可以通过 运行 这行代码进行测试:
Console.WriteLine((byteresult == Convert.ToInt32("BA", 16)).ToString());
如果我从您的评论中正确理解了您的意思,那么您的代码实际上可以满足您的要求。
string tmp = "40FA";
int uid_1 = Convert.ToInt32(tmp.Substring(0, 2), 16);
int uid_2 = Convert.ToInt32(tmp.Substring(2, 2), 16);
int test = uid_1 ^ uid_2 ;
string final = test.ToString("X");
// here you actually have achieved what you wanted.
byte byteresult = Byte.Parse(final , NumberStyles.HexNumber);
现在您可以使用 byteresult
将其存储在 byte[]
中,并且:
byte[] MyByteArray = new byte[4];
MyByteArray [0] = byteresult;
执行应该没有问题。
尝试调用该函数,它会将 string
转换为 bytes
private byte[] String_To_Bytes2(string strInput)
{
int numBytes = (strInput.Length) / 2;
byte[] bytes = new byte[numBytes];
for (int x = 0; x < numBytes; ++x)
{
bytes[x] = Convert.ToByte(strInput.Substring(x * 2, 2), 16);
}
return bytes;
}
static void Main(string[] args)
{
string tmp = "40FA";
int uid_1 = Convert.ToInt32(tmp.Substring(0, 2), 16);
int uid_2 = Convert.ToInt32(tmp.Substring(2, 2), 16);
int test = uid_1 ^ uid_2;
string final = test.ToString("X");
byte[] toBytes = String_To_Bytes2(final);
Console.WriteLine(toBytes);
Console.ReadKey();
}