关于c#:从字符串转换为字节

Converting from string to byte

我有一根弦,它是40FA。我想对它执行一个XOR操作,并返回一个字节,在本例中是0xBA。但是,我只能得到字符串中的BA。当我把BA转换成byte时,我得到186

1
2
3
4
5
6
7
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);


尝试调用该函数,它会将string转换为bytes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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();
}

尝试:

1
2
3
4
5
byte[] toBytes = Encoding.ASCII.GetBytes(somestring);

and for bytes to string

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


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

正如Dmitrybenko所说:0XBA与186号相同。如果你想把它存储在那里,对你的字节数组来说并不重要。它只对你作为一个用户重要,如果你想显示它。

编辑:您可以通过运行以下代码行来测试它:

1
Console.WriteLine((byteresult == Convert.ToInt32("BA", 16)).ToString());

如果我从你的评论中正确地理解了你,你的代码实际上就是你想要的。

1
2
3
4
5
6
7
8
9
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[]中,这样:

1
2
byte[] MyByteArray = new byte[4];
MyByteArray [0] = byteresult;

应该毫无问题地执行。


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

结果是十进制的186或十六进制的BA。同样的价值,只是另一个底座。

1
2
3
4
5
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");