Go——字符串與整形互轉問題

理論是灰色的,但實踐之樹長青🌲

概要

最近用go實現RUDP的過程中遇到服務端和客戶端數據傳輸問題,涉及到字符串和整形數字互轉的問題,遇到的坑在這裏總結記錄一下,共同學習!

代碼

爲了在服務端向客戶端回傳整形數字,這裏採用先將數字轉換爲字符串,然後通過字節數組回傳,但是在解析過程中debug發現解析錯誤,如圖所示:

服務端代碼

在這裏插入圖片描述

客戶端代碼

在這裏插入圖片描述
問題在於string的強轉是不對的,string(int)這種強轉會導致亂碼問題,所以之後我採用strconv.Itoa(int)的方式轉換,解決了該問題!

服務端轉化代碼:

//反饋數據,以字符串形式反饋
	feedbackStr := ""
	start := 1
	for index := range receData {
		if start == 1 {
			feedbackStr = strconv.Itoa(index)  //itoa的轉換方式
		}else {
			feedbackStr = "," + strconv.Itoa(index)
		}
		start++
	}

客戶端解析代碼:

//對反饋接收到的包從sendData清理,如果超時,發送需要重新傳送的剩餘數據
		for _ , v := range packageNoBuf {
			fmt.Println("發送成功數據包序列號:", v)
			int, err := strconv.Atoi(v)  //這次解析沒有錯誤了
			if err != nil {
				fmt.Println("數據轉換錯誤,<", err, ">")
				return
			}
		}

總結

在字符串和整形數字轉換的場景中不要使用強制轉換,爲了避免數據傳輸解析過程中的錯誤,推薦使用"strconv"包下的strconv.Atoi(string)和strconv.Itoa(int)兩個方法!

個人使用Go實現的RUDP:https://github.com/SpecialAll/RUDP
歡迎大家一起交流學習!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章