首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 非數字字串轉 32 位整數再還原的誤區與正確做法

     編輯:程式設計綜合問答

錯誤代碼分析

string scene_id = "SYSTEM000000000000018428#0000000001";
byte[] myBytes = Encoding.UTF8.GetBytes(scene_id); // 長度遠超過 8 位元組
long iscene = BitConverter.ToInt64(myBytes, 0);    // 只取前 8 位元組!
byte[] tb = BitConverter.GetBytes(iscene);         // 只能還原前 8 位元組
string ts = Encoding.UTF8.GetString(tb);           // 截斷後的亂碼

核心誤解

任意長度字串無法無損壓縮進固定 32/64 位整數。資訊熵不允許:2^32 種整數值無法一一對應無限多字串。

正確傳輸方案

  1. 直接傳完整位元組陣列:byte[] data = Encoding.UTF8.GetBytes(str); 透過網路/序列化傳遞 data,對端 Encoding.UTF8.GetString(data) 完美還原。
  2. 需定長識別碼:用 GUID (Guid.NewGuid())、資料庫自增 ID、雪花演算法 ID 等,對應關係存資料庫/快取,傳輸端只傳 ID。
  3. 若必須短字串:Base64/Base32 編碼原位元組,但長度仍與原資料成正比,無法壓縮。

結論

放棄「字串→定長整數→字串」的幻想,老實傳完整位元組或用映射 ID。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved