十六进制字符串如何转换为对应的中英文字符?

时间:2020-11-29 07:47:05
比如有字符串539F65873435 它是"原文45"转换而来的,如何把这个字符串转换回"原文45"?

17 个解决方案

#1


加密的吧/比如MD5之类的,这个极有可能是无法反向还原的。

#2


 public   string   HexToDec(   string   strHex   )   
  {   
  try   
  {   
  int   dec   =    Convert.ToInt32(   strHex,16   );   
  return   dec.ToString   (   )   ;   
  }   
  catch(   Exception   ee   )   
  {   
  throw   new   Exception(   ee.ToString   (   )   )   ;   
  }   
  }

#3


ding

#4


你原来是怎么加密的就怎么解密.要是用的BYTE值就用BYTETOSTRING.就是这样.

#5


帮顶

#6


这个应该是密文

#7


up

#8


问题已经解决了,但是我还是不明白 比如汉字是4个字节,而其他字符是2个字节
这些字节混合起来,是如何转化回 对应的汉字和其他字符混合的字符串的.

把其他字符页写成4字节表示 就简单了

#9


引用 8 楼 chx_xuxu 的回复:
问题已经解决了,但是我还是不明白 比如汉字是4个字节,而其他字符是2个字节 
这些字节混合起来,是如何转化回 对应的汉字和其他字符混合的字符串的. 

把其他字符页写成4字节表示 就简单了

1:如果是用于加密的话一般不是对字符,而是对字节进行操作,因此就无所谓几个字节了。
2:你说的这个什么汉字4字节等情况可能是指字符编码。Unicode使用一种类似于双字节编码的方案。
对于双字节的编码,比如汉字:第一个字节是128-255(该字节的最高位为1),第二个字节是0-127(最高位为0);
对于双字节中出现的很多英文字符,不使用双字节的方案,直接是0-127就可以了,所以对于这种字符可以节约空间。
假设:128-255的字节以A表示,0-127的字节以B表示。双字节的编码大概类似于:
[AB][B][B][AB][AB][B][B][AB]
[]里的内容表示解释为一个字符(一个汉字或者一个英文字母)。
HOHO,这是我的一点理解,希望对你有帮助。有错误的的地方希望各位指正。

#10


如果字串是这样的:

539F658700340035
这就好说了,可少了两个"00"就不知道了。

539F658700340035的转换简单,就是如下:

string str = "539F658700340035";
byte[] bts = new byte[str.Length / 2];
for (int i = 0; i < str.Length/2; i++)
{
bts[i] = (byte)(int.Parse(str.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber));
}
string nstr = System.Text.Encoding.BigEndianUnicode.GetString(bts);
//nstr为:原文45

#11


简单的说,把一个中英文混合的字符串转化为以16进制表示的字符串
16进制表示的字符串如何转化回中英文混合的字符串

#12


539F658700340035
这个时字节组吧,如果去掉'00'
怎么通过此字节组返回它原来字符?

#13


用 BitConverter.GetBytes先把这个539F65873435 两个两个的截取获取
这个字符串的字节数 最后用Encoding.Default.GetString

#14


楼上的:
539F65873435时表示字符的16进制字符串,把它转化为10进制再BitConverter.GetBytes 结果时乱码

#15


最后顶一次

#16


我觉得字符串里的数据就是丢了两个"00",除非指定了分隔符,否则3435会按一个字符来解释。
因为不论什么样的算法,都不会只把539F和6587合到一起而不把3435合到一起。

如果硬说可以的话,那只有一个可能了,就是按值的大小来分开的,就是3435小于某一个数,而539F和6587大于了这个数,算法就是小于这个数的时候取2位是一个字符,而大于这个数时候按4位算一个字符。

#17


看来是这样了  结帖

#1


加密的吧/比如MD5之类的,这个极有可能是无法反向还原的。

#2


 public   string   HexToDec(   string   strHex   )   
  {   
  try   
  {   
  int   dec   =    Convert.ToInt32(   strHex,16   );   
  return   dec.ToString   (   )   ;   
  }   
  catch(   Exception   ee   )   
  {   
  throw   new   Exception(   ee.ToString   (   )   )   ;   
  }   
  }

#3


ding

#4


你原来是怎么加密的就怎么解密.要是用的BYTE值就用BYTETOSTRING.就是这样.

#5


帮顶

#6


这个应该是密文

#7


up

#8


问题已经解决了,但是我还是不明白 比如汉字是4个字节,而其他字符是2个字节
这些字节混合起来,是如何转化回 对应的汉字和其他字符混合的字符串的.

把其他字符页写成4字节表示 就简单了

#9


引用 8 楼 chx_xuxu 的回复:
问题已经解决了,但是我还是不明白 比如汉字是4个字节,而其他字符是2个字节 
这些字节混合起来,是如何转化回 对应的汉字和其他字符混合的字符串的. 

把其他字符页写成4字节表示 就简单了

1:如果是用于加密的话一般不是对字符,而是对字节进行操作,因此就无所谓几个字节了。
2:你说的这个什么汉字4字节等情况可能是指字符编码。Unicode使用一种类似于双字节编码的方案。
对于双字节的编码,比如汉字:第一个字节是128-255(该字节的最高位为1),第二个字节是0-127(最高位为0);
对于双字节中出现的很多英文字符,不使用双字节的方案,直接是0-127就可以了,所以对于这种字符可以节约空间。
假设:128-255的字节以A表示,0-127的字节以B表示。双字节的编码大概类似于:
[AB][B][B][AB][AB][B][B][AB]
[]里的内容表示解释为一个字符(一个汉字或者一个英文字母)。
HOHO,这是我的一点理解,希望对你有帮助。有错误的的地方希望各位指正。

#10


如果字串是这样的:

539F658700340035
这就好说了,可少了两个"00"就不知道了。

539F658700340035的转换简单,就是如下:

string str = "539F658700340035";
byte[] bts = new byte[str.Length / 2];
for (int i = 0; i < str.Length/2; i++)
{
bts[i] = (byte)(int.Parse(str.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber));
}
string nstr = System.Text.Encoding.BigEndianUnicode.GetString(bts);
//nstr为:原文45

#11


简单的说,把一个中英文混合的字符串转化为以16进制表示的字符串
16进制表示的字符串如何转化回中英文混合的字符串

#12


539F658700340035
这个时字节组吧,如果去掉'00'
怎么通过此字节组返回它原来字符?

#13


用 BitConverter.GetBytes先把这个539F65873435 两个两个的截取获取
这个字符串的字节数 最后用Encoding.Default.GetString

#14


楼上的:
539F65873435时表示字符的16进制字符串,把它转化为10进制再BitConverter.GetBytes 结果时乱码

#15


最后顶一次

#16


我觉得字符串里的数据就是丢了两个"00",除非指定了分隔符,否则3435会按一个字符来解释。
因为不论什么样的算法,都不会只把539F和6587合到一起而不把3435合到一起。

如果硬说可以的话,那只有一个可能了,就是按值的大小来分开的,就是3435小于某一个数,而539F和6587大于了这个数,算法就是小于这个数的时候取2位是一个字符,而大于这个数时候按4位算一个字符。

#17


看来是这样了  结帖