从字符串转换为字节

时间:2016-07-01 07:31:30

标签: c# string byte xor

我有一个40FA的字符串。我想对它执行XOR操作并在这种情况下返回一个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);

4 个答案:

答案 0 :(得分:2)

尝试:

byte[] toBytes = Encoding.ASCII.GetBytes(somestring);

and for bytes to string

string something = Encoding.ASCII.GetString(toBytes);

答案 1 :(得分:2)

尝试调用该函数,它会将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();
}

答案 2 :(得分:1)

您的输入似乎是十六进制值,因此您需要将两位数解析为一个字节。然后XOR这两个字节。

结果是十进制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");

答案 3 :(得分:1)

我认为这里有一点误会。你实际上已经解决了你的问题。计算机不关心数字是十进制还是十六进制或十八进制还是二进制。这些只是一个数字的表示。所以只有你关心它是如何显示的。

正如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;

应该没有问题地执行。