试图将十六进制转换为字符串,但却获得了大量字符,这在python中有效,但在C#中无效



我正在尝试将十六进制值转换为字符串。它在python中运行良好,但在C#中,它只是一堆字符。

十六进制:"293A4D48E43D5D1FBBFC8993DD93949F"

Python

>>> bytearray.fromhex('293A4D48E43D5D1FBBFC8993DD93949F');
bytearray(b'):MHxe4=]x1fxbbxfcx89x93xddx93x94x9f')

C#

public static string HextoString(string InputText)
{
byte[] bb = Enumerable.Range(0, InputText.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(InputText.Substring(x, 2), 16))
.ToArray();
return System.Text.Encoding.Unicode.GetString(bb);
// or System.Text.Encoding.UTF7.GetString
// or System.Text.Encoding.UTF8.GetString
// or System.Text.Encoding.Unicode.GetString
// or etc.
}
HextoString('293A4D48E43D5D1FBBFC8993DD93949F');
// "):MH?=]▼????????"

Python和C#决定如何以不同的方式处理不可打印的字符。在Python的情况下,它打印它们的转义序列(例如xe4(,但在C#中,不可打印的字符被打印为问号。在打印之前,您可能需要将字符串转换为转义字符串文字。

嗨,我的朋友,你可以选择以下方式之一:

  1. 在Python中将十六进制转换为字符串:

    print(字节.fromhex('68656c6c6f'(.decode('utf-8'((

2.使用codecs.decode:

import codecs
my_string = "68656c6c6f"
my_string_bytes = bytes(my_string, encoding='utf-8')
binary_string = codecs.decode(my_string_bytes, "hex")
print(str(binary_string, 'utf-8'))

3.将十六进制附加到字符串

def hex_to_string(hex):
if hex[:2] == '0x':
hex = hex[2:]
string_value = bytes.fromhex(hex).decode('utf-8')
return string_value
hex_value = '0x737472696e67'
string = 'This is just a ' + hex_to_string('737472696e67')
print(string)

祝你好运(Arman Golbidi(

相关内容

最新更新