C#中16进制转化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中16进制转化相关的知识,希望对你有一定的参考价值。

例如将31 4C 13 92 43 28 54 82 38 4C 82 30 4E 25 49 52 2E 25 8A 30 4E 25 92 33 29 02 32 CA 2B 92 33 A9 02 33 CA 2B 92 32 29 6A 0A 31 4C 13 92 43 28 54 82 38 4C 82 30 4E 25 49 52 2E 25 8A 30 4E 25 92 33 E9 02 32 CA 2B 92 33 A9 02 33 CA 2B 92 32 29 6A 0A
转化成11542CCD5081 009****.* 109+024.1 209+023.6 309+021.8这种数据 有高人指点吗?

首先,你要知道你要用什么样的规则转成什么样的数据。
1.假如这堆是一个字符串的在内存中的十六进制数据,那么,你先将这些转成字节数组,然后根据相应的编码使用相应的编码取得字符串:如纯英文数字ASCII的话是Encoding.ASCII.GetString(bytes);如果是GBK编码用Encoding.GetEncoding("gbk").GetString(bytes);如果是UTF8是用Encoding.UTF8.GetString(bytes)
2.假如这堆是一个32位的整型,那么用BitConverter.ToUInt32(bytes, 0) (提示,有时会高低位字节互换,那么你要在ToUInt32之前用Array.Reverse(bytes);)

总之先把先保证这些数据是字节数组,然后可以根据不同的规则转为你想要的数据。

如果你这些十六进制是字符串形式的,那么第一步可以先使用下面的代码将它由字符串转为字节数组:
private static byte[] GetBytes(string byteStr)

string[] arrBytes = byteStr.Trim().Split(' ');
byte[] bytes = new byte[arrBytes.Length];

for (int i = 0; i < bytes.Length; i++)

string b = arrBytes[i];
bytes[i] = byte.Parse(b, System.Globalization.NumberStyles.AllowHexSpecifier);


return bytes;

祝好运!追问

你这说的没用 我现在就只要
31 4C 13 92 43 28 54 82 38 4C 82 30 4E 25 49 52 2E 25 8A 30 4E 25 92 33 29 02 32 CA 2B
转化成11542CCD5081 009****.* 109+024.1 209+023.6 309+021.8这种数据
你那转化为字节数组那个方法我写了 现在我用System.Text.Encoding.ASCII.GetString()来转化,结果都是乱码。不明白为什么。

参考技术A string.format("0:x", d) 把d数据转成16进制显示的字符串。
不知道楼主是什么意思。
109+024这个是什么东西?
怎么还有.8这种,进制转化没小数的啊。
参考技术B 不知道

C# 把word转成2进制存储到SQL2000中的问题

用FileUpload控件上传一个word文档,把这个文档转成二进制存进SQL2000中,数据库中对应的类型是image。类似于EMAIL中的附件上传,上传后转二进制存到数据库中。对方收到EMAIL,从附件中取的时候,再从SQL2000中读取出WORD文件下载。需求是存成2进制,就别说存路径的方法了。
回复
1楼的:你真是高手,就你知道不合理。
2楼的:我试过,但是图片取的时候C#有IMAGE类型,WORD我存什么类型?
3楼的:我也用过序列化,但是反序列化的时候还是遇到了不知道存什么类型拿出来。

参考技术A 可以呀,直接使用filestream读取字节数组就可以了。
这个和把图片保存到数据库的原理是一模一样的。

==========
问题补充回答:
你把doc文档看作图片保存就可以了。在这儿,关键是保存二进制数据,你不要想的太复杂了。在二进制情况下,是没有任何格式的,所以也不存在图片或者doc了。你把从doc中取到的字节数组直接保存到image字段中即可。
参考技术B 存数据库是最傻的方法............如果客户硬来也没办法,是不是觉得备份方便?呵呵。

楼主参考存图片的一样的方法。例如http://topic.csdn.net/t/20021025/10/1123704.html。
在WORD那里其实也可以存IMAGE类型。在SQL SERVER 2000那里二进制共3种类型,其中binary和varbinary都要指定字节数,而IMAGE不需要。顺便说一下,如果有可能的话建议用SQL SERVER 2005,那里改良了TEXT类型和IMAGE类型,用VARCHAR(MAX)和varbinary(MAX)来代替,操作更灵活。

在字段那里再加一个字段定义文件的原始文件名。
取出的时候还是将读出内容转成byte[]就OK了。

参考资料:http://topic.csdn.net/t/20021025/10/1123704.html

参考技术C 数据库数据类型用binary
存的时候转成byte []
读取的时候 (byte [])read.getvalue(列);
参考技术D 这种做法根本不合理 第5个回答  2008-07-04 序列化吧!

以上是关于C#中16进制转化的主要内容,如果未能解决你的问题,请参考以下文章

c# 16进制显示转化

用C语言将16进制数转化为10进制数 16进制数以字符串形式输入 最好运用数组 谢谢

十进制转化为十六进制怎么算

c# winform 如何实现16进制颜色值的转换

进制转化复习( 万能的a进制转化为b进制)

c语言中如何将10进制的浮点数转化为16进制数