C#中数组转整数再转回数组丢失原始值问题排查
问题根源与解决方案
你的核心问题是存储数组时没有用分隔符区分元素,导致元素边界完全丢失,后续根本无法还原原始数组:
原始错误逻辑的问题点:
string.Concat(array)直接拼接元素得到"01315",转成int时开头的0会被整数自动忽略,变成1315,直接丢失了第一个元素0。- 把
1315转回字符串后按字符拆分,自然会把原本的15拆成1和5——因为此时没有任何标记能区分15是单个元素还是两个独立的数字。
正确的实现方式:
存储和还原时必须用分隔符(比如逗号)标记每个元素的边界,代码修改如下:
double[] array = { 0, 1, 3, 15 }; // 存储阶段:用分隔符拼接元素 var result = string.Join(",", array); // 得到 "0,1,3,15" // 还原阶段:按分隔符拆分后逐个转int int[] resultToArray = result.Split(',') .Select(s => int.Parse(s)) .ToArray(); // 得到 {0,1,3,15}
如果硬要通过整数存储(不推荐,因为多位数元素会导致边界丢失,且数组过长会超出整数范围),可以给每个元素固定位数(比如每个元素占两位,不足补0),但这种方式局限性很大:
double[] array = { 0, 1, 3, 15 }; // 存储:每个元素补成两位字符串再拼接 var resultStr = string.Concat(array.Select(n => n.ToString("D2"))); // 得到 "00010315" int resultNumber = int.Parse(resultStr); // 得到 10315 // 还原:按每两位拆分再转int int[] resultToArray = Enumerable.Range(0, resultStr.Length / 2) .Select(i => int.Parse(resultStr.Substring(i * 2, 2))) .ToArray(); // 得到 {0,1,3,15}
但这种方式只能处理固定位数的元素,一旦元素位数超过预设值就会出错,所以优先推荐用分隔符拼接字符串的方案。
内容的提问来源于stack exchange,提问作者user2529011
相关产品推荐
相关产品推荐

