字符串(含有汉字)转化为ascII16进制问题

tttt0945 2004-09-05 10:26:13
如果要将字符串转变为ascii十进制码,用System.Text.Encoding.Default.GetBytes就可以,那么怎么将其转变为ascII16进制呢。

我也想过先变为10进制然后再变为16进制,但是一个汉字是由2个区位码表示,一个区位码占3位,而数字和有的英文字符只占2位,不好判断啊

不知各位有没有其他的想法
...全文
1388 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
rickjelly2004 2004-09-07
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=196658
TonyTonyQ 2004-09-07
  • 打赏
  • 举报
回复
你既然要byte型的,那和16进制有何关系?你所能看到的16进制字符当然只可能是字符型的,就算你保存到数据库里,要以16进制显示,也只能使用字符型的字段。你不可能将"FF"保存进数字型字段然后让它以这种形式显示出来。

你现在只有2种做法,一就是以字符型来保存转换出来的16进制字符串,然后使用的时候再转换到byte;二就是以byte型保存,当要显示出来的时候转换为16进制字符串输出到屏幕上。
tttt0945 2004-09-07
  • 打赏
  • 举报
回复
汉,多谢楼上各位,经过艰苦奋战,终于搞定了
wanbook 2004-09-07
  • 打赏
  • 举报
回复
哥们:你的问题问的有点,,,,你能不能直接把程序要求说出来,,
coollzh 2004-09-06
  • 打赏
  • 举报
回复
string gb="对每个字节数据转换为16进制";
for(int i=0;i<gb.Length;i++)
Console.WriteLine((int)gb[i]);
TonyTonyQ 2004-09-06
  • 打赏
  • 举报
回复
你要实现什么?实现对汉字编码?变成可以在网上传输的那种16进制编码,类似%8D%E2这种?这样的话,用System.Web.HTTPUtility.URLEncode()就行。
光光10进制转换到16进制的话,可以用 bytes(i).ToString("X"), 这是将一个字节转换为一个16进制字符串,"X"表示大写16进制字符,用"x"可以得到小写的。

.net内置了很多处理文字编码解码的类,基本上不用自己处理字节位这一级上的问题。
tttt0945 2004-09-06
  • 打赏
  • 举报
回复
int??

这是在c#里面吧,在vb.net里Int函数不是这个用法吧。。。。
tttt0945 2004-09-06
  • 打赏
  • 举报
回复
多谢,我知道都是以2进制存放的,可能我表达的意思有点错误,现在的问题是数据库里面要求用16进制的。。。
jiezhi 2004-09-06
  • 打赏
  • 举报
回复
我想告诉你的是,你如果想将一个你看到的byte[]中的10进制数字转换为你想看到的16进制的byte[]的话,你就有点可笑了。
因为计算机内部都是以2进制表示的,你看到的只不过是编辑器给你呈现出来10进制样子而已
jiezhi 2004-09-06
  • 打赏
  • 举报
回复
/// <summary>
/// Converts an ASCII string to hex formatted lines.
/// </summary>
public static string AtoX(string asc)
{
int nLines;
int nChars;
int offset;
string hex = "";

// Compute number of hex lines.
if((asc.Length % 16) > 0)
nLines = asc.Length/16+1;
else
nLines = asc.Length/16;

// Convert into hex lines.
for(int i = 0; i < nLines; i++)
{
offset = i * 16;
if((asc.Length - offset) > 16)
nChars = 16;
else
nChars = asc.Length - offset;
hex += HexLine(i, asc.Substring(offset, nChars)) + "\r\n";
}
return hex;
}

/// <summary>
/// Converts a 16 byte ASCII string into one hex formatted line.
/// </summary>
private static string HexLine(int lNum, string asc)
{
string hex = "";

// Copy line to char buffer.
char[] c = new char[16];
asc.CopyTo(0, c, 0, asc.Length);

// Create offset prefix.
hex += String.Format("{0:X8} - {1:X8}", lNum*16, (lNum+1)*16-1);
hex += " ";

// Convert chars to hex representation.
for(int i = 0; i < asc.Length; i++)
{
if((i != 0) && ((i % 4) == 0))
hex += " ";
hex += String.Format("{0:X2}", (int) c[i]);
}

// Add padding.
int nSpaces = 62 - hex.Length;
for(int i = 0; i < nSpaces; i++)
hex += " ";

// Add ASCII to end of line.
for(int i = 0; i < asc.Length; i++)
{
if(((int) c[i] < 32) || ((int) c[i] > 126))
hex += ".";
else
hex += c[i].ToString();
}

// Return hex dump line.
return hex;
}
jiezhi 2004-09-06
  • 打赏
  • 举报
回复
byte[] b= ...;
string s = "";
for(int i=0;i<b.Length;i++)
s += Convert.ToString(b[i],16);
tttt0945 2004-09-06
  • 打赏
  • 举报
回复
我晕啊,还是不行,用hex()后得出的是string型,不是byte型
tttt0945 2004-09-06
  • 打赏
  • 举报
回复
多谢,我自己编了个函数解决。

其实我的意思就是比如说“我是谁“这个字符串,用System.Text.Encoding.Default.GetBytes得到的是“206210202199203173“,这是ascII的十进制码,考虑到汉字编码的方式然后就需要将206--〉CE变为16进制。
triout 2004-09-05
  • 打赏
  • 举报
回复
对每个字节数据转换为16进制
ASCII 十六进制 转换工具 简单计算器:可进行简单的四则运算,支持小键盘输入! 进制转换:数值型的常用进制的相互转换: (2、8、16)10 及 216 说明:由于数值型转换函数为自行编写,所以支持包括小数部分. (适用于计算器等级考级的笔试基础题) 字符转换: 可转换多个字符为ASCII码(十进制)及十六进制,且可加入前置及后置字符。 字符转ASCII(即字符的十进制): 其中字符转换为ASCII码中,如果字符为汉字(即双字节) 可选择:正数、负数或者字节分离三种表示方式 利如汉字"中" 正数:54992 负数:-10544 字节分离:214,208 说明: 如果包含汉字字符,且选了负数或字节分离表示方式, 请不要使用"-"或","来作为前、后置符,以免逆操作时引起错误 ASCII转字符:就是上面的逆操作,这时只要输入对应的ASCII码就能转换为字符 说明: 1.由于本程序有判断功能,所以可不用选择汉字表达方式, 即您输入54992或-10544或214,208都能转换为汉字"中" 2.如果进行待逆操作的ASCII码包含分隔,请必须在前置和后置符框输入对应字符 例如:%-15133;%-17725;想逆向转为字符,须在前置符填入% 后置符填入; %-15133 %-17725 则前置符填入% 后置符输入空格 注意要转为字符的对应数值一定有要间隔符 例如:%-15133%-17725是没法进行转换的,而应该像上面一样改为%-15133 %-17725 即间隔至少(默认)为空格符 字符转换为十六进制及其逆操作与上面基本相同 说明:例如在前置符加了%即可求UTF-8值 键盘ASCII查询:可查键盘按键的十进制与十六进制值。 (例如可查询F1-F12,Shift,Ctrl,Alt,回车,退格等键值) 字符与Base64互转:字符与Base64编码的互转,可自定义密钥,以达到简单的加密! 子网划分辅助: IP转二进制:把IP地址或子网掩码转化为二进制形式. 二进制数操作:把上面转化到的IP二进制进行取反、与、或操作。 说明:普通二进制(即没有包括".")也可进行操作。 IP二进制转十进制:即把上面得到的二进制结果重新转换为十进制方式。 常见问题: 1.问:“进制转换”与“字符转换”都具有转为十六进制的操作,有何不同? 答:“进制转换”只能转换数值型,而“字符转换”是把该字符串一位一位 分别当作字符来转换! 2."字符转换"中想把对应的值转化为对应的字符,如果包括分隔符,需要手工 填入。 (详见上面的:ASCII转字符) 3."字符转换"中点击“键盘的ASCII查询”(即有键盘图标的那个按钮后) 该按钮会自动隐藏,然后可按键盘键来得到对应的值 查询完毕,可单击下面的状态栏恢愎(键盘图标的那个按钮出现) 4.关于子网划分辅助的使用: 在这里给予一段(黑客X档案中iqst)如何利用子网掩码得到网络、主机地址的文章节选: 如下: 如何用子网掩码得到网络、主机地址 (1)将IP地址与子网掩码转换成二进制; (2)将二进制形式的IP地址与子网掩码做“与”运算,将答案化为十进制便得到网络地址; (3)将二进制形式的子网掩码取“反”; (4)将取“反”后的子网掩码与IP地址做“与”运算,将答案化为十进制便得到主机地址。 通过上面的一段大家应该有所了解了,如果还不太明白可勾选“示范”来查看。 我把上面操作的各个模块都独立出来而不是一步求出结果, 目的是让大家能更方便的使用各个步聚来完成类似的需求!

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧