發(fā)文章
發(fā)文工具
撰寫(xiě)
網(wǎng)文摘手
文檔
視頻
思維導(dǎo)圖
隨筆
相冊(cè)
原創(chuàng)同步助手
其他工具
圖片轉(zhuǎn)文字
文件清理
AI助手
留言交流
數(shù)據(jù)類(lèi)型有很多種,數(shù)據(jù)類(lèi)型間的轉(zhuǎn)換也是有很多的方法,如果不細(xì)心整理的話等到用的時(shí)候再查就會(huì)顯得很浪費(fèi)時(shí)間,所以決心整理出這篇博文。主要是講解常用數(shù)據(jù)類(lèi)型之間的轉(zhuǎn)換方法以及常見(jiàn)數(shù)據(jù)類(lèi)型所占字節(jié)數(shù)。
字節(jié)數(shù)據(jù)類(lèi)型與其它數(shù)據(jù)類(lèi)型間的轉(zhuǎn)換方法主要放在BitConverter類(lèi)中:
http://msdn.microsoft.com/zh-cn/library/system.bitconverter%28v=vs.100%29.aspx
其它數(shù)據(jù)類(lèi)型轉(zhuǎn)換為字節(jié)類(lèi)型主要通過(guò)重載GetBytes()方法返回字節(jié)類(lèi)型數(shù)組。
但是字符串類(lèi)型根據(jù)編碼方式的不同返回的字節(jié)類(lèi)型不同,所以字符串類(lèi)型的轉(zhuǎn)換通過(guò)Encoding類(lèi)中的GetBytes()方法返回字節(jié)數(shù)組。
關(guān)于占用字節(jié)情況的注意:
布爾類(lèi)型占用一個(gè)字節(jié),雖然布爾類(lèi)型只用一比特就能表示但是還是需要占用一個(gè)字節(jié),度娘說(shuō)最小的存儲(chǔ)單元是一字節(jié)。
字符類(lèi)型在C#中占用二字節(jié),代表一個(gè)Unicode字符,Marshal.SizeOf((typeof(char)); 得到的是非托管類(lèi)型的大小(占用一字節(jié))。在測(cè)試中會(huì)發(fā)現(xiàn)存入數(shù)字就是一個(gè)字節(jié),存入數(shù)組就是兩個(gè)字節(jié)。
還有不要誤會(huì)啊,字符串類(lèi)型是沒(méi)有固定長(zhǎng)度的,是在實(shí)際使用中根據(jù)實(shí)際情況確定長(zhǎng)度的。
下面測(cè)試代碼:
//定義變量并初始化
byte
[] Test_byte =
new
[] { 0, 1, 2, 3 };
[] Temp_byte;
bool
Test_bool;
int
Test_int;
float
Test_float;
char
Test_char;
string
Test_string;
//byte 2 bool
//返回由字節(jié)數(shù)組中指定位置的一個(gè)字節(jié)轉(zhuǎn)換來(lái)的布爾值。
//public static bool ToBoolean(byte[] value, int startIndex);
Test_bool = BitConverter.ToBoolean(Test_byte, 1);
Console.WriteLine(
"bool is: {0}"
, Test_bool.ToString());
//bool 2 byte
//以字節(jié)數(shù)組的形式返回指定的布爾值。
//public static byte[] GetBytes(bool value);
Temp_byte = BitConverter.GetBytes(Test_bool);
"bool length is: {0}"
, Temp_byte.Length);
//byte 2 int
//返回由字節(jié)數(shù)組中指定位置的四個(gè)字節(jié)轉(zhuǎn)換來(lái)的 32 位有符號(hào)整數(shù)。
//public static int ToInt32(byte[] value, int startIndex);
Test_int = BitConverter.ToInt32(Test_byte, 0);
"int is: {0}"
, Test_int);
//int 2 byte
//以字節(jié)數(shù)組的形式返回指定的 32 位有符號(hào)整數(shù)值。
//public static byte[] GetBytes(int value);
Temp_byte = BitConverter.GetBytes(Test_int);
"int length is: {0}"
//byte 2 float
//返回由字節(jié)數(shù)組中指定位置的四個(gè)字節(jié)轉(zhuǎn)換來(lái)的單精度浮點(diǎn)數(shù)。
//public static float ToSingle(byte[] value, int startIndex);
Test_float = BitConverter.ToSingle(Test_byte, 0);
"float is: {0}"
, Test_float);
//float 2 byte
//以字節(jié)數(shù)組的形式返回指定的單精度浮點(diǎn)值。
//public static byte[] GetBytes(float value);
Temp_byte = BitConverter.GetBytes(Test_float);
"float length is: {0}"
//byte 2 char
//返回由字節(jié)數(shù)組中指定位置的兩個(gè)字節(jié)轉(zhuǎn)換來(lái)的 Unicode 字符。
//public static char ToChar(byte[] value, int startIndex);
Test_char = BitConverter.ToChar(Test_byte, 0);
"char is: {0}"
, Test_char);
//char 2 byte
//以字節(jié)數(shù)組的形式返回指定的 Unicode 字符值。
//public static byte[] GetBytes(char value);
Temp_byte = BitConverter.GetBytes(Test_char);
"char length is: {0}"
//byte 2 string
//將指定的字節(jié)子數(shù)組的每個(gè)元素的數(shù)值轉(zhuǎn)換為它的等效十六進(jìn)制字符串表示形式。
//public static string ToString(byte[] value, int startIndex);
Test_string = BitConverter.ToString(Test_byte, 0);
"string is: {0}"
, Test_string);
//string 2 byte
//在派生類(lèi)中重寫(xiě)時(shí),將指定的 System.String 中的所有字符編碼為一個(gè)字節(jié)序列。
//public virtual byte[] GetBytes(string s);
Temp_byte = Encoding.Default.GetBytes(Test_string);
"string length is: {0}"
//char test
Test_c1 =
'人'
;
Test_c2 =
'1'
Temp_byte = BitConverter.GetBytes(Test_c1);
"Byte characters occupy is: {0}"
Temp_byte = BitConverter.GetBytes(Test_c2);
"Byte digital occupy is: {0}"
//string test
Test_str1 =
"人"
Test_str2 =
"1"
Temp_byte = Encoding.Default.GetBytes(Test_str1);
Temp_byte = Encoding.Default.GetBytes(Test_str2);
將一個(gè)基本數(shù)據(jù)類(lèi)型轉(zhuǎn)換為另一個(gè)基本數(shù)據(jù)類(lèi)型Convert類(lèi):
http://msdn.microsoft.com/zh-cn/library/system.convert_methods%28v=vs.100%29.aspx
區(qū)別,以數(shù)值8為例:
BitConverter.GetBytes();//以字節(jié)數(shù)組的形式返回指定的 32 位有符號(hào)整數(shù)值。
返回的是字節(jié)數(shù)組,也就是數(shù)值33的存儲(chǔ)形式:00000000 00000000 00000000 00001000 ,在調(diào)試中十進(jìn)制顯示:0 0 0 8
Convert.ToByte();//將指定的 32 位有符號(hào)整數(shù)的值轉(zhuǎn)換為等效的 8 位無(wú)符號(hào)整數(shù)。
返回的是字節(jié),也就是把數(shù)值8轉(zhuǎn)換為字節(jié)類(lèi)型的8了:00001000 ,在調(diào)試中十進(jìn)制顯示為:8
來(lái)自: 昵稱(chēng)10504424 > 《工作》
0條評(píng)論
發(fā)表
請(qǐng)遵守用戶 評(píng)論公約
C# 如何將一個(gè)字符串轉(zhuǎn)換成字節(jié)數(shù)組”與“如何將一個(gè)字節(jié)數(shù)組轉(zhuǎn)換成一個(gè)字符串
C# 如何將一個(gè)字符串轉(zhuǎn)換成字節(jié)數(shù)組”與“如何將一個(gè)字節(jié)數(shù)組轉(zhuǎn)換成一個(gè)字符串“如何將一個(gè)字符串轉(zhuǎn)換成字節(jié)數(shù)組”與“如何將一個(gè)字節(jié)數(shù)組轉(zhuǎn)換成一個(gè)字符串”兩者使用的時(shí)機(jī)視數(shù)據(jù)內(nèi)容而定,您必須根據(jù)...
如何:使用數(shù)據(jù)保護(hù)
Protect method while passing an array of bytes to encrypt, the entropy, and the data protection scope." xml:space="preserve">調(diào)用靜態(tài) Protect 方法,同時(shí)傳遞要加密的字節(jié)...
c#FileStream文件讀寫(xiě)(轉(zhuǎn))
c#FileStream文件讀寫(xiě)(轉(zhuǎn))字符數(shù)據(jù)易于使用,但是有些操作,比如隨機(jī)文件訪問(wèn)(訪問(wèn)文件中間某點(diǎn)的數(shù)據(jù)),就必須由FileStream對(duì)象執(zhí)行,稍后對(duì)此進(jìn)行介紹。FileStream類(lèi)維護(hù)內(nèi)部文件指針,該指針指向文...
C#指針操作Marshal實(shí)例
//從source數(shù)組的startIndex下標(biāo)開(kāi)始復(fù)制length個(gè)對(duì)象到ptr; Marshal.Copy(b,0,pt+0,b.Length); //從ptr復(fù)制length個(gè)對(duì)象到目標(biāo)數(shù)組的,...
Socket傳輸大文件(發(fā)送與接收)
.NET基礎(chǔ)拾遺(3)字符串、集合和流-(上)
NET基礎(chǔ)拾遺(3)字符串、集合和流-(上)此外,StringBuilder內(nèi)部還有一個(gè)同為StringBuilder類(lèi)型的m_ChunkPrevious,它是內(nèi)部的一個(gè)St...
C#入門(mén)——輸入輸出語(yǔ)句、變量、變量本質(zhì)、變量命名規(guī)范
C#入門(mén)——輸入輸出語(yǔ)句、變量、變量本質(zhì)、變量命名規(guī)范。namespace lesson2_變量練習(xí)題{ class Program { static void Main(string[] args) { #region 習(xí)題1 //下面代碼的輸出結(jié)果是 36.6 double num ...
C#讀寫(xiě)txt文件的兩種方法介紹
//byData傳進(jìn)來(lái)的字節(jié)數(shù)組,用以接受FileStream對(duì)象中的數(shù)據(jù),第2個(gè)參數(shù)是字節(jié)數(shù)組中開(kāi)始寫(xiě)入數(shù)據(jù)的位置,它通常是0,表示從數(shù)組的開(kāi)端文件中向數(shù)組寫(xiě)數(shù)據(jù),最后一個(gè)參數(shù)規(guī)定從文件讀多少字符. Decoder d = ...
WebClient的詳細(xì)用法
WebClient的詳細(xì)用法提供向 URI 標(biāo)識(shí)的資源發(fā)送數(shù)據(jù)和從 URI 標(biāo)識(shí)的資源接收數(shù)據(jù)的公共方法。WebClient 類(lèi)提供向 URI 標(biāo)識(shí)的任何本地、Intranet 或 Internet 資源發(fā)送數(shù)據(jù)以及從這些資源接收數(shù)據(jù)的公共...
微信掃碼,在手機(jī)上查看選中內(nèi)容