直接將字符變量賦值給整型變量,即可實(shí)現(xiàn)字符到對(duì)應(yīng)ASCII碼的轉(zhuǎn)換。

成都創(chuàng)新互聯(lián)公司是一家成都網(wǎng)站建設(shè)、網(wǎng)站制作,提供網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),網(wǎng)站制作,建網(wǎng)站,按需定制網(wǎng)站,網(wǎng)站開(kāi)發(fā)公司,于2013年創(chuàng)立是互聯(lián)行業(yè)建設(shè)者,服務(wù)者。以提升客戶品牌價(jià)值為核心業(yè)務(wù),全程參與項(xiàng)目的網(wǎng)站策劃設(shè)計(jì)制作,前端開(kāi)發(fā),后臺(tái)程序制作以及后期項(xiàng)目運(yùn)營(yíng)并提出專(zhuān)業(yè)建議和思路。
具體實(shí)現(xiàn)方法可以參考如下程序段:
char str[]="abds%*34dfs"; // 定義一個(gè)字符數(shù)組,存放待轉(zhuǎn)換為ASCII碼的字符串
int AsciiNum[20]; // 定義一個(gè)整型數(shù)組,存放字符所對(duì)應(yīng)的ASCII碼值,數(shù)組大小根據(jù)字符串長(zhǎng)度進(jìn)行設(shè)置
int i;
// 將字符串的每個(gè)字符逐個(gè)賦值給整型數(shù)組AsciiNum,即實(shí)現(xiàn)字符到ASCII碼值的轉(zhuǎn)換
for(i=0; istrlen(str); i++)
{
AsciiNum[i] = str[i]; // 最后數(shù)組AsciiNum就是字符串每個(gè)字符所對(duì)應(yīng)ASCII碼值的數(shù)組
}
當(dāng)分別處于大小端模式下的內(nèi)容存放如下
(1)大端模式存儲(chǔ)(存儲(chǔ)地址為16位)
地址 數(shù)據(jù)
0x0004(高地址) 0x44
0x0003 0x33
0x0002 0x22
0x0001(低地址) 0x11
(2)小端模式存儲(chǔ)(存儲(chǔ)地址為16位)
地址 數(shù)據(jù)
0x0004(高地址) 0x11
0x0003 0x22
0x0002 0x33
0x0001(低地址) 0x44
在前面也簡(jiǎn)單闡述了大小端序的定義并結(jié)合簡(jiǎn)單實(shí)例來(lái)說(shuō)明,接下來(lái)會(huì)給出詳細(xì)實(shí)例來(lái)說(shuō)明:
1、大端序(Big-Endian):或稱大尾序
一個(gè)類(lèi)型: int32 的數(shù) 0X0A0B0C0D的內(nèi)存存放情況
數(shù)據(jù)是以8bits為單位
2、小端序(little-endian):或稱小尾序
比如0x00000001
大端序:內(nèi)存低比特位 00000000 00000000 00000000 00000001 內(nèi)存高比特位
小端序:內(nèi)存低比特位 10000000 00000000 00000000 00000000 內(nèi)存高比特位
其實(shí)在前面羅列出那么東西,最終是為了接下來(lái)講述的在golang中涉及到網(wǎng)絡(luò)傳輸、文件存儲(chǔ)時(shí)的選擇。一般來(lái)說(shuō)網(wǎng)絡(luò)傳輸?shù)淖止?jié)序,可能是大端序或者小端序,取決于軟件開(kāi)始時(shí)通訊雙方的協(xié)議規(guī)定。TCP/IP協(xié)議RFC1700規(guī)定使用“大端”字節(jié)序?yàn)榫W(wǎng)絡(luò)字節(jié)序,開(kāi)發(fā)的時(shí)候需要遵守這一規(guī)則。默認(rèn)golang是使用大端序。詳情見(jiàn)golang中包encoding/binary已提供了大、小端序的使用
輸出結(jié)果:
16909060 use big endian:
int32 to bytes: [1 2 3 4] ### [0001 0002 0003 0004]
bytes to int32: 16909060
16909060 use little endian:
int32 to bytes: [4 3 2 1] ### [0004 0003 0002 0001]
bytes to int32: 16909060
在RPCX框架中關(guān)于RPC調(diào)用過(guò)程涉及的傳遞消息進(jìn)行編碼的,采用的就是大端序模式
golang語(yǔ)言本身就是c的工具集,開(kāi)發(fā)c的程序用到的大部分結(jié)構(gòu)體,內(nèi)存管理,攜程等,golang基本都有,他只是在這個(gè)基礎(chǔ)上又加了一些概念這里說(shuō)一個(gè)很小的問(wèn)題,就是字節(jié)數(shù)組轉(zhuǎn)string的問(wèn)題,網(wǎng)上大部分都是這樣轉(zhuǎn)的(包括google上):string(p[:]),這個(gè)轉(zhuǎn)完了是有問(wèn)題的,我們?cè)賮?lái)看一下string這個(gè)結(jié)構(gòu)體:
struct String
{
byte* str;
intgo len;
};
這個(gè)結(jié)構(gòu)體讓我想起了nginx的string,他是這樣定義的:
typedef struct {
size_t len;
u_char *data;
} ngx_str_t;
golang里邊 string的概念其實(shí)不是以前遇到\0結(jié)尾的概念了,他其實(shí)就是一塊連續(xù)的內(nèi)存,首地址+長(zhǎng)度,上面那樣賦值,如果p里邊有\(zhòng)0,他不會(huì)做處理這個(gè)時(shí)候,如果再對(duì)這個(gè)string做其他處理就可能出問(wèn)題了,比如strconv.Atoi轉(zhuǎn)成int就有錯(cuò)誤,解決辦法就是需要自己寫(xiě)一個(gè)正規(guī)的轉(zhuǎn)換函數(shù):
func byteString(p []byte) string {
for i := 0; i len(p); i++ {
if p[i] == 0 {
return string(p[0:i])
}
}
return string(p)
}
這樣就不會(huì)出問(wèn)題了
Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)中提供了sort包對(duì)整型,浮點(diǎn)型,字符串型切片進(jìn)行排序,檢查一個(gè)切片是否排好序,使用二分法搜索函數(shù)在一個(gè)有序切片中搜索一個(gè)元素等功能。
關(guān)于sort包內(nèi)的函數(shù)說(shuō)明與使用,請(qǐng)查看
在這里簡(jiǎn)單講幾個(gè)sort包中常用的函數(shù)
在Go語(yǔ)言中,對(duì)字符串的排序都是按照字節(jié)排序,也就是說(shuō)在對(duì)字符串排序時(shí)是區(qū)分大小寫(xiě)的。
二分搜索算法
Go語(yǔ)言中提供了一個(gè)使用二分搜索算法的sort.Search(size,fn)方法:每次只需要比較㏒?n個(gè)元素,其中n為切片中元素的總數(shù)。
sort.Search(size,fn)函數(shù)接受兩個(gè)參數(shù):所處理的切片的長(zhǎng)度和一個(gè)將目標(biāo)元素與有序切片的元素相比較的函數(shù),該函數(shù)是一個(gè)閉包,如果該有序切片是升序排列,那么在判斷時(shí)使用 有序切片的元素 = 目標(biāo)元素。該函數(shù)返回一個(gè)int值,表示與目標(biāo)元素相同的切片元素的索引。
在切片中查找出某個(gè)與目標(biāo)字符串相同的元素索引
go語(yǔ)言的字符串是UTF-8編碼的、不可改變的字節(jié)序列。
要修改字符串,只能以原串為基礎(chǔ),創(chuàng)建一個(gè)新串。下面的圖中是一個(gè)參考示例,提供了以原串為藍(lán)本,創(chuàng)建新串的兩種方法。
代碼
輸出
本文題目:go語(yǔ)言網(wǎng)絡(luò)字節(jié)序互換,go語(yǔ)言重構(gòu)
分享鏈接:http://chinadenli.net/article14/phigde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、網(wǎng)站建設(shè)、微信公眾號(hào)、搜索引擎優(yōu)化、小程序開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)