如何做到 byte[] 和 十六进制 互转?
生活随笔
收集整理的這篇文章主要介紹了
如何做到 byte[] 和 十六进制 互转?
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
咨詢區(qū)
alextansc:
請(qǐng)問(wèn)我如何實(shí)現(xiàn)將 byte[] 和 十六進(jìn)制的string 進(jìn)行互轉(zhuǎn)?
回答區(qū)
balrob:
如果你的程序是基于 .NET5 的,可以使用 Convert 下新增的兩個(gè)方法 ToHexString 和 FromHexString ,參考下面兩個(gè)方法的定義。
// //?Summary: //?????Converts?an?array?of?8-bit?unsigned?integers?to?its?equivalent?string?representation //?????that?is?encoded?with?uppercase?hex?characters. // //?Parameters: //???inArray: //?????An?array?of?8-bit?unsigned?integers. // //?Returns: //?????The?string?representation?in?hex?of?the?elements?in?inArray. // //?Exceptions: //???T:System.ArgumentNullException: //?????inArray?is?null. // //???T:System.ArgumentOutOfRangeException: //?????inArray?is?too?large?to?be?encoded. public?static?string?ToHexString(byte[]?inArray);// //?Summary: //?????Converts?the?specified?string,?which?encodes?binary?data?as?hex?characters,?to //?????an?equivalent?8-bit?unsigned?integer?array. // //?Parameters: //???s: //?????The?string?to?convert. // //?Returns: //?????An?array?of?8-bit?unsigned?integers?that?is?equivalent?to?s. // //?Exceptions: //???T:System.ArgumentNullException: //?????s?is?null. // //???T:System.FormatException: //?????The?length?of?s,?is?not?zero?or?a?multiple?of?2. // //???T:System.FormatException: //?????The?format?of?s?is?invalid.?s?contains?a?non-hex?character. public?static?byte[]?FromHexString(string?s);Mykroft:
在 W3cXsd2001 命名空間下有一個(gè)可以實(shí)現(xiàn) byte[] 到 hex 之間的轉(zhuǎn)換方法,我覺(jué)得可以滿足你的需求,參考如下:
using?System.Runtime.Remoting.Metadata.W3cXsd2001;public?static?byte[]?GetStringToBytes(string?value) {SoapHexBinary?shb?=?SoapHexBinary.Parse(value);return?shb.Value; }public?static?string?GetBytesToString(byte[]?value) {SoapHexBinary?shb?=?new?SoapHexBinary(value);return?shb.ToString(); }Waleed Eissa:
我最近剛好也遇到了這個(gè)問(wèn)題,我是這么解決的。
byte[]?bytes?=?{0,?1,?2,?4,?8,?16,?32,?64,?128,?256} Console.WriteLine(?BitConverter.ToString(bytes));但用它性能會(huì)比較慢,所以基于它我做了一個(gè)版本優(yōu)化,性能是它的8倍以上,參考如下:
private?static?string?ByteArrayToHex(byte[]?barray) {char[]?c?=?new?char[barray.Length?*?2];byte?b;for?(int?i?=?0;?i?<?barray.Length;?++i){b?=?((byte)(barray[i]?>>?4));c[i?*?2]?=?(char)(b?>?9???b?+?0x37?:?b?+?0x30);b?=?((byte)(barray[i]?&?0xF));c[i?*?2?+?1]?=?(char)(b?>?9???b?+?0x37?:?b?+?0x30);}return?new?string(c); }點(diǎn)評(píng)區(qū)
沒(méi)想到 .NET5 中已經(jīng)有了 FromHexString,ToHexString 方法, Convert 類越來(lái)越強(qiáng)大了,工作效率看樣子又可以提高了。
總結(jié)
以上是生活随笔為你收集整理的如何做到 byte[] 和 十六进制 互转?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 排序集合的一个小坑
- 下一篇: 在 Azure VM 上使用 Jitsi