日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android byte转16进制字符串,如何将字节数组转换为十六进制字符串,反之亦然?...

發布時間:2024/9/30 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android byte转16进制字符串,如何将字节数组转换为十六进制字符串,反之亦然?... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我通過一些粗略的Stopwatch性能測試運行了各種轉換方法,一個帶有隨機句子的運行(n = 61,1000次迭代)和一個帶有Project Gutenburg文本的運行(n = 1,238,957,150次迭代)。以下是結果,大致從最快到最慢。所有測量均以刻度(10,000滴= 1毫秒)為單位,所有相關注釋與[最慢]?StringBuilder實施進行比較。對于使用的代碼,請參閱下面或測試框架repo,其中我現在維護用于運行此代碼的代碼。

放棄

警告:不要將這些屬性用于任何混凝土;?它們只是樣本數據的樣本運行。如果您確實需要一流的性能,請在代表您的生產需求的環境中測試這些方法,并使用代表您將使用的數據。

結果

查找表已經領先于字節操作。基本上,有一些形式的預計算任何給定的半字節或字節將以十六進制表示。然后,當您瀏覽數據時,只需查找下一部分即可看到它將是什么十六進制字符串。然后以某種方式將該值添加到結果字符串輸出中。對于長時間的字節操作,一些開發人員可能更難閱讀,是表現最好的方法。

您最好的選擇仍然是找到一些有代表性的數據并在類似生產的環境中進行嘗試。如果您有不同的內存限制,您可能更喜歡使用較少分配的方法,但速度更快但消耗更多內存的方法。

測試代碼

隨意玩我使用的測試代碼。這里包含一個版本,但可以隨意克隆存儲庫并添加自己的方法。如果您發現任何有趣的內容或希望幫助改進其使用的測試框架,請提交拉取請求。將新的靜態方法(Func)添加到/Tests/ConvertByteArrayToHexString/Test.cs。

將該方法的名稱添加到TestCandidates同一個類中的返回值。

通過GenerateTestInput在同一個類中切換注釋,確保運行所需的輸入版本,句子或文本。

點擊F5并等待輸出(在/ bin文件夾中也生成HTML轉儲)。static?string?ByteArrayToHexStringViaStringJoinArrayConvertAll(byte[]?bytes)?{

return?string.Join(string.Empty,?Array.ConvertAll(bytes,?b?=>?b.ToString("X2")));}

static?string?ByteArrayToHexStringViaStringConcatArrayConvertAll(byte[]?bytes)?{

return?string.Concat(Array.ConvertAll(bytes,?b?=>?b.ToString("X2")));}static?string?ByteArrayToHexStringViaBitConverter(byte[]?bytes)?{

string?hex?=?BitConverter.ToString(bytes);

return?hex.Replace("-",?"");}static?string?ByteArrayToHexStringViaStringBuilderAggregateByteToString(byte[]?bytes)?{

return?bytes.Aggregate(new?StringBuilder(bytes.Length?*?2),?(sb,?b)?=>?sb.Append(b.ToString("X2"))).ToString();}

static?string?ByteArrayToHexStringViaStringBuilderForEachByteToString(byte[]?bytes)?{

StringBuilder?hex?=?new?StringBuilder(bytes.Length?*?2);

foreach?(byte?b?in?bytes)

hex.Append(b.ToString("X2"));

return?hex.ToString();}static?string?ByteArrayToHexStringViaStringBuilderAggregateAppendFormat(byte[]?bytes)?{

return?bytes.Aggregate(new?StringBuilder(bytes.Length?*?2),?(sb,?b)?=>?sb.AppendFormat("{0:X2}",?b)).ToString();}

static?string?ByteArrayToHexStringViaStringBuilderForEachAppendFormat(byte[]?bytes)?{

StringBuilder?hex?=?new?StringBuilder(bytes.Length?*?2);

foreach?(byte?b?in?bytes)

hex.AppendFormat("{0:X2}",?b);

return?hex.ToString();}static?string?ByteArrayToHexViaByteManipulation(byte[]?bytes)?{

char[]?c?=?new?char[bytes.Length?*?2];

byte?b;

for?(int?i?=?0;?i?

b?=?((byte)(bytes[i]?>>?4));

c[i?*?2]?=?(char)(b?>?9???b?+?0x37?:?b?+?0x30);

b?=?((byte)(bytes[i]?&?0xF));

c[i?*?2?+?1]?=?(char)(b?>?9???b?+?0x37?:?b?+?0x30);

}

return?new?string(c);}static?string?ByteArrayToHexViaByteManipulation2(byte[]?bytes)?{

char[]?c?=?new?char[bytes.Length?*?2];

int?b;

for?(int?i?=?0;?i?

b?=?bytes[i]?>>?4;

c[i?*?2]?=?(char)(55?+?b?+?(((b?-?10)?>>?31)?&?-7));

b?=?bytes[i]?&?0xF;

c[i?*?2?+?1]?=?(char)(55?+?b?+?(((b?-?10)?>>?31)?&?-7));

}

return?new?string(c);}static?string?ByteArrayToHexViaSoapHexBinary(byte[]?bytes)?{

SoapHexBinary?soapHexBinary?=?new?SoapHexBinary(bytes);

return?soapHexBinary.ToString();}static?string?ByteArrayToHexViaLookupAndShift(byte[]?bytes)?{

StringBuilder?result?=?new?StringBuilder(bytes.Length?*?2);

string?hexAlphabet?=?"0123456789ABCDEF";

foreach?(byte?b?in?bytes)?{

result.Append(hexAlphabet[(int)(b?>>?4)]);

result.Append(hexAlphabet[(int)(b?&?0xF)]);

}

return?result.ToString();}static?readonly?uint*?_lookup32UnsafeP?=?(uint*)GCHandle.Alloc(_Lookup32,?GCHandleType.Pinned)

.AddrOfPinnedObject();static?string?ByteArrayToHexViaLookup32UnsafeDirect(byte[]?bytes)?{

var?lookupP?=?_lookup32UnsafeP;

var?result?=?new?string((char)0,?bytes.Length?*?2);

fixed?(byte*?bytesP?=?bytes)

fixed?(char*?resultP?=?result)?{

uint*?resultP2?=?(uint*)resultP;

for?(int?i?=?0;?i?

resultP2[i]?=?lookupP[bytesP[i]];

}

}

return?result;}static?uint[]?_Lookup32?=?Enumerable.Range(0,?255).Select(i?=>?{

string?s?=?i.ToString("X2");

return?((uint)s[0])?+?((uint)s[1]?<

var?result?=?new?char[bytes.Length?*?2];

for?(int?i?=?0;?i?

{

var?val?=?_Lookup32[bytes[i]];

result[2*i]?=?(char)val;

result[2*i?+?1]?=?(char)?(val?>>?16);

}

return?new?string(result);}static?string?ByteArrayToHexViaLookup(byte[]?bytes)?{

string[]?hexStringTable?=?new?string[]?{

"00",?"01",?"02",?"03",?"04",?"05",?"06",?"07",?"08",?"09",?"0A",?"0B",?"0C",?"0D",?"0E",?"0F",

"10",?"11",?"12",?"13",?"14",?"15",?"16",?"17",?"18",?"19",?"1A",?"1B",?"1C",?"1D",?"1E",?"1F",

"20",?"21",?"22",?"23",?"24",?"25",?"26",?"27",?"28",?"29",?"2A",?"2B",?"2C",?"2D",?"2E",?"2F",

"30",?"31",?"32",?"33",?"34",?"35",?"36",?"37",?"38",?"39",?"3A",?"3B",?"3C",?"3D",?"3E",?"3F",

"40",?"41",?"42",?"43",?"44",?"45",?"46",?"47",?"48",?"49",?"4A",?"4B",?"4C",?"4D",?"4E",?"4F",

"50",?"51",?"52",?"53",?"54",?"55",?"56",?"57",?"58",?"59",?"5A",?"5B",?"5C",?"5D",?"5E",?"5F",

"60",?"61",?"62",?"63",?"64",?"65",?"66",?"67",?"68",?"69",?"6A",?"6B",?"6C",?"6D",?"6E",?"6F",

"70",?"71",?"72",?"73",?"74",?"75",?"76",?"77",?"78",?"79",?"7A",?"7B",?"7C",?"7D",?"7E",?"7F",

"80",?"81",?"82",?"83",?"84",?"85",?"86",?"87",?"88",?"89",?"8A",?"8B",?"8C",?"8D",?"8E",?"8F",

"90",?"91",?"92",?"93",?"94",?"95",?"96",?"97",?"98",?"99",?"9A",?"9B",?"9C",?"9D",?"9E",?"9F",

"A0",?"A1",?"A2",?"A3",?"A4",?"A5",?"A6",?"A7",?"A8",?"A9",?"AA",?"AB",?"AC",?"AD",?"AE",?"AF",

"B0",?"B1",?"B2",?"B3",?"B4",?"B5",?"B6",?"B7",?"B8",?"B9",?"BA",?"BB",?"BC",?"BD",?"BE",?"BF",

"C0",?"C1",?"C2",?"C3",?"C4",?"C5",?"C6",?"C7",?"C8",?"C9",?"CA",?"CB",?"CC",?"CD",?"CE",?"CF",

"D0",?"D1",?"D2",?"D3",?"D4",?"D5",?"D6",?"D7",?"D8",?"D9",?"DA",?"DB",?"DC",?"DD",?"DE",?"DF",

"E0",?"E1",?"E2",?"E3",?"E4",?"E5",?"E6",?"E7",?"E8",?"E9",?"EA",?"EB",?"EC",?"ED",?"EE",?"EF",

"F0",?"F1",?"F2",?"F3",?"F4",?"F5",?"F6",?"F7",?"F8",?"F9",?"FA",?"FB",?"FC",?"FD",?"FE",?"FF",

};

StringBuilder?result?=?new?StringBuilder(bytes.Length?*?2);

foreach?(byte?b?in?bytes)?{

result.Append(hexStringTable[b]);

}

return?result.ToString();}

總結

以上是生活随笔為你收集整理的android byte转16进制字符串,如何将字节数组转换为十六进制字符串,反之亦然?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。