山東mip網(wǎng)站建設(shè)網(wǎng)絡(luò)營(yíng)銷(xiāo)屬于哪個(gè)專(zhuān)業(yè)
本文講述在C#中,怎樣使用 BitConverter 類(lèi)將字節(jié)數(shù)組轉(zhuǎn)換為 int 然后又轉(zhuǎn)換回字節(jié)數(shù)組的過(guò)程。
為什么需要這樣呢?這是因?yàn)?#xff0c;比如說(shuō),在從網(wǎng)絡(luò)讀取字節(jié)之后,可能需要將字節(jié)轉(zhuǎn)換為內(nèi)置數(shù)據(jù)類(lèi)型。 除了示例中的 ToInt32(Byte[], Int32) 方法之外,下面還列出了一些 BitConverter 類(lèi)中將字節(jié)(來(lái)自字節(jié)數(shù)組)轉(zhuǎn)換為其他內(nèi)置類(lèi)型的方法。
bool ToBoolean(Byte[], Int32)
char ToChar(Byte[], Int32)
double ToDouble(Byte[], Int32)
short ToInt16(Byte[], Int32)
int ToInt32(Byte[], Int32)
long ToInt64(Byte[], Int32)
float ToSingle(Byte[], Int32)
ushort ToUInt16(Byte[], Int32)
uint ToUInt32(Byte[], Int32)
ulong ToUInt64(Byte[], Int32)
下面的例子會(huì)初始化字節(jié)數(shù)組,并在計(jì)算機(jī)體系結(jié)構(gòu)為 little-endian(即首先存儲(chǔ)最低有效字節(jié))的情況下反轉(zhuǎn)數(shù)組,然后調(diào)用 ToInt32(Byte[], Int32) 方法以將數(shù)組中的四個(gè)字節(jié)轉(zhuǎn)換為 int。 ToInt32(Byte[], Int32) 的第二個(gè)參數(shù)指定字節(jié)數(shù)組的起始索引。
注意:輸出可能會(huì)根據(jù)字節(jié)大小端而不同。
byte[] bytes = { 0, 0, 0, 25 };
// 倘若系統(tǒng)架構(gòu)是little-endian(小端序),則將字節(jié)數(shù)組反轉(zhuǎn)。
if (BitConverter.IsLittleEndian)
Array.Reverse(bytes);
int i = BitConverter.ToInt32(bytes, 0);
Console.WriteLine("int: {0}", i);
// 輸出: int: 25
在下面的例子中,將調(diào)用 BitConverter 類(lèi)的 GetBytes(Int32) 方法,將 int 轉(zhuǎn)換為字節(jié)數(shù)組。
注意:輸出可能會(huì)根據(jù)計(jì)算機(jī)體系結(jié)構(gòu)的字節(jié)順序而不同。
byte[] bytes = BitConverter.GetBytes(201805978);
Console.WriteLine("byte array: " + BitConverter.ToString(bytes));
// 輸出: byte array: 9A-50-07-0C
參考:
1. 《BitConverter class》: https://learn.microsoft.com/en-us/dotnet/api/system.bitconverter
2. 《理解字節(jié)序 · 阮一峰》: https://www.ruanyifeng.com/blog/2016/11/byte-order.html
?