C#中汉字转十六进制和VB转十六进制转的不一样,下面是代码。

时间:2023-01-05 20:58:34
 public static string GetHexFromChs(string s)  //'汉字转16进制,s为传过来的汉字字符串
        {
            //if ((s.Length % 2) != 0)
            //    throw new ArgumentException("s   is   not   valid   chinese   string!");

            System.Text.Encoding chs = System.Text.Encoding.GetEncoding("gb2312");
            //int m = s.Length;
            // string str1 = "";
            //Encoding.ASCII.GetString(
            byte[] bytes = chs.GetBytes(s); 
            string str = ""; 
            for (int i = 0; i < bytes.Length; i++)
            { 
                str += string.Format("{0:X}", bytes[i]);
            } 
            return str;
        }

Function GBToHex(sGB As String) As String  'sGB为传来的汉字字符串
    '汉字转16进制
    Dim sResult  As String
    Dim iLoop As Integer
    sResult = ""
    For iLoop = 1 To Len(sGB)
            sResult = sResult + Right("0000" + Hex(Asc(Mid(sGB, iLoop, 1))), 4)
    Next iLoop
    GBToHex = sResult
End Function

26 个解决方案

#1


该回复于2017-06-23 11:31:43被版主删除

#2


我的C#的转完后加入是  CDF6D3。。。。
    VB的转后          CDF6D003。。。很多地方都是多了两三个零,其他的字符是一样的,这怎么让他们一样啊,我是用来软件注册的,VB的软件和C#的软件都判断这个注册号,VB的转的对,我用C#开发了一个新软件也判断这个号,现在不同C#的软件不能用,???

#3


c#代码中

str += string.Format("{0:X}", bytes[i]);

改为

str += string.Format("{0:X2}", bytes[i]);

#4


晕,你的代码有问题,这与C#还是VB有啥关系

#5


str += string.Format("{0:X2}", bytes[i]);
("{0:X2}", 这里的X2什么意思啊,就是补充的零的个数吗

#6


X表示16进制
X2表示2位的16进制,如果不足,补0.
效果对了么?

#7


我的VB的是那样转的,因为开始注册的时候是用VB的软件注册的,所以VB的转16进制判断注册号对,但是C#的那样转出来的不一样,所以问问大家是不是我VB的C#那个地方写的不对

#8


  string str = "";  
  for (int i = 0; i < bytes.Length; i++)
  {  
  str += string.Format("{0:X}", bytes[i]);
  }  


可以改为:

str = BitConverter.ToString(bytes).Replace("-","");

#9


v叔 V5

#10


学习了;

#11


引用 6 楼 wuyazhe 的回复:
X表示16进制
X2表示2位的16进制,如果不足,补0.
效果对了么?
我试了,不对,C#中还是CDF3。。。。应该是CDF003。。。。我发现VB中很多多零的地方时3前面,都是003然后字符,C#中都没有00只是字符 直接加3 CDF3

#12


VB6.0企业版,C#2008

#13


C#中汉字转十六进制和VB转十六进制转的不一样,下面是代码。

#14


引用 8 楼 viena 的回复:
C# code
  string str = "";  
  for (int i = 0; i < bytes.Length; i++)
  {  
  str += string.Format("{0:X}", bytes[i]);
  }  


可以改为:


C# code
str = BitConverter.ToString(bytes).Replace("-……

).Replace("-……
这是什么?我的C#生成的字符中没有“-”这个符号啊,

#15


快快帮帮忙啊大家

#16


引用 9 楼 wuyazhe 的回复:
v叔 V5
????

#17


你用哪个字符串做的测试?没看到03的

#18


引用 14 楼 yinqiuyan 的回复:
这是什么?我的C#生成的字符中没有“-”这个符号啊

BitConverter.ToString直接把byte数组转为16进制字符串,结果字符串是逐字节以'-'隔开的

引用 9 楼 wuyazhe 的回复:
v叔 V5

v叔就是我,没看我的viena是v开头的吗
V5就是威武,最近流行的网络缩略语

#19


引用 18 楼 viena 的回复:
引用 14 楼 yinqiuyan 的回复:
这是什么?我的C#生成的字符中没有“-”这个符号啊

BitConverter.ToString直接把byte数组转为16进制字符串,结果字符串是逐字节以'-'隔开的


引用 9 楼 wuyazhe 的回复:
v叔 V5

v叔就是我,没看我的viena是v开头的吗
V5就是威武,最近流行的网络缩略语

哦,呵呵,还以为是什么那,OUT了我,我的用“-”这个隔开就会出现003了吗,然后我把“-”这个符号去掉是把,17楼的,我的是一个酒店地址,启德大酒店。。。

#20


具体是汉字是“启2亿0定1全0德0定9全亿。。。”大家可以看看,转出来的是字符加3。。。,
VB的是字符加003。。。

#21


看VB代码,好像是每个字符ASCII转16进制,然后前面以0补足4位,不知道对不对?

#22


Uniode一个字符是两个字节的,
C#代码完全不对了

#23


public static string GetHexFromChs3(string s)
{
    Encoding encoding = Encoding.GetEncoding("GB2312");
    StringBuilder builder = new StringBuilder();
    foreach (char c in s)
    {
        builder.Append(BitConverter.ToString(encoding.GetBytes(c.ToString())).Replace("-","").PadLeft(4,'0'));
    }
    return builder.ToString();
}

#24


好像是,但是都是在一个字符上转出来的不一样,都是有003的地方,其他的地方C#的和VB的都一样,只有这个003不一样,改怎么办,难道要找出是哪个汉字转成了转的一个是3一个是003,然后我把这个汉字单独手动加进去00,但是该怎么加啊

#25


引用 23 楼 wuyazhe 的回复:
C# code
public static string GetHexFromChs3(string s)
{
    Encoding encoding = Encoding.GetEncoding("GB2312");
    StringBuilder builder = new StringBuilder();
    foreach (char c in s)
    {
……
这个我去试试

#26


引用 23 楼 wuyazhe 的回复:
C# code
public static string GetHexFromChs3(string s)
{
    Encoding encoding = Encoding.GetEncoding("GB2312");
    StringBuilder builder = new StringBuilder();
    foreach (char c in s)
    {
……
   这个好使,非常感谢 wuyazhe(逍遥) 
viena (wien 维也纳),你们两个还有其他帮顶贴的人,问题解决了,结贴

#1


该回复于2017-06-23 11:31:43被版主删除

#2


我的C#的转完后加入是  CDF6D3。。。。
    VB的转后          CDF6D003。。。很多地方都是多了两三个零,其他的字符是一样的,这怎么让他们一样啊,我是用来软件注册的,VB的软件和C#的软件都判断这个注册号,VB的转的对,我用C#开发了一个新软件也判断这个号,现在不同C#的软件不能用,???

#3


c#代码中

str += string.Format("{0:X}", bytes[i]);

改为

str += string.Format("{0:X2}", bytes[i]);

#4


晕,你的代码有问题,这与C#还是VB有啥关系

#5


str += string.Format("{0:X2}", bytes[i]);
("{0:X2}", 这里的X2什么意思啊,就是补充的零的个数吗

#6


X表示16进制
X2表示2位的16进制,如果不足,补0.
效果对了么?

#7


我的VB的是那样转的,因为开始注册的时候是用VB的软件注册的,所以VB的转16进制判断注册号对,但是C#的那样转出来的不一样,所以问问大家是不是我VB的C#那个地方写的不对

#8


  string str = "";  
  for (int i = 0; i < bytes.Length; i++)
  {  
  str += string.Format("{0:X}", bytes[i]);
  }  


可以改为:

str = BitConverter.ToString(bytes).Replace("-","");

#9


v叔 V5

#10


学习了;

#11


引用 6 楼 wuyazhe 的回复:
X表示16进制
X2表示2位的16进制,如果不足,补0.
效果对了么?
我试了,不对,C#中还是CDF3。。。。应该是CDF003。。。。我发现VB中很多多零的地方时3前面,都是003然后字符,C#中都没有00只是字符 直接加3 CDF3

#12


VB6.0企业版,C#2008

#13


C#中汉字转十六进制和VB转十六进制转的不一样,下面是代码。

#14


引用 8 楼 viena 的回复:
C# code
  string str = "";  
  for (int i = 0; i < bytes.Length; i++)
  {  
  str += string.Format("{0:X}", bytes[i]);
  }  


可以改为:


C# code
str = BitConverter.ToString(bytes).Replace("-……

).Replace("-……
这是什么?我的C#生成的字符中没有“-”这个符号啊,

#15


快快帮帮忙啊大家

#16


引用 9 楼 wuyazhe 的回复:
v叔 V5
????

#17


你用哪个字符串做的测试?没看到03的

#18


引用 14 楼 yinqiuyan 的回复:
这是什么?我的C#生成的字符中没有“-”这个符号啊

BitConverter.ToString直接把byte数组转为16进制字符串,结果字符串是逐字节以'-'隔开的

引用 9 楼 wuyazhe 的回复:
v叔 V5

v叔就是我,没看我的viena是v开头的吗
V5就是威武,最近流行的网络缩略语

#19


引用 18 楼 viena 的回复:
引用 14 楼 yinqiuyan 的回复:
这是什么?我的C#生成的字符中没有“-”这个符号啊

BitConverter.ToString直接把byte数组转为16进制字符串,结果字符串是逐字节以'-'隔开的


引用 9 楼 wuyazhe 的回复:
v叔 V5

v叔就是我,没看我的viena是v开头的吗
V5就是威武,最近流行的网络缩略语

哦,呵呵,还以为是什么那,OUT了我,我的用“-”这个隔开就会出现003了吗,然后我把“-”这个符号去掉是把,17楼的,我的是一个酒店地址,启德大酒店。。。

#20


具体是汉字是“启2亿0定1全0德0定9全亿。。。”大家可以看看,转出来的是字符加3。。。,
VB的是字符加003。。。

#21


看VB代码,好像是每个字符ASCII转16进制,然后前面以0补足4位,不知道对不对?

#22


Uniode一个字符是两个字节的,
C#代码完全不对了

#23


public static string GetHexFromChs3(string s)
{
    Encoding encoding = Encoding.GetEncoding("GB2312");
    StringBuilder builder = new StringBuilder();
    foreach (char c in s)
    {
        builder.Append(BitConverter.ToString(encoding.GetBytes(c.ToString())).Replace("-","").PadLeft(4,'0'));
    }
    return builder.ToString();
}

#24


好像是,但是都是在一个字符上转出来的不一样,都是有003的地方,其他的地方C#的和VB的都一样,只有这个003不一样,改怎么办,难道要找出是哪个汉字转成了转的一个是3一个是003,然后我把这个汉字单独手动加进去00,但是该怎么加啊

#25


引用 23 楼 wuyazhe 的回复:
C# code
public static string GetHexFromChs3(string s)
{
    Encoding encoding = Encoding.GetEncoding("GB2312");
    StringBuilder builder = new StringBuilder();
    foreach (char c in s)
    {
……
这个我去试试

#26


引用 23 楼 wuyazhe 的回复:
C# code
public static string GetHexFromChs3(string s)
{
    Encoding encoding = Encoding.GetEncoding("GB2312");
    StringBuilder builder = new StringBuilder();
    foreach (char c in s)
    {
……
   这个好使,非常感谢 wuyazhe(逍遥) 
viena (wien 维也纳),你们两个还有其他帮顶贴的人,问题解决了,结贴