数字与字符串的转换

编程中,经常需要在数字和字符串之间进行转换。例如,将一个数字转换为一个特定的进制表示,或者将一个字符串转换回数字。本文将介绍如何在C#中实现这些转换,包括自定义字符集和进制转换。

自定义字符集

在进行数字和字符串的转换时,首先需要定义一个字符集,这个字符集将用于表示数字。以下是一个常用的字符集,它支持从基数2到64的转换:

namespace PIEBALD.Lib { public static partial class LibStr { // 用于字符串表示数值的字符 public const string Digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_$"; } }

这个字符集包含了0到9的数字、A到Z的大写字母、a到z的小写字母以及一些特殊字符。用户可以根据需要提供不同的字符集。

字符串到数字的转换

接下来,需要将字符串转换为数字。这里使用long类型来存储转换后的数字,但根据需要,可以选择其他类型。以下是转换的实现:

public static long StringToLong(string Subject, int Base, string Digits) { if (Subject == null) { throw new System.ArgumentNullException("Subject", "Subject must not be null"); } if (Base < 2) { throw new System.ArgumentException("Base must not be less than 2", "Base"); } if (Digits == null) { Digits = LibStr.Digits; } if (Digits.Length < Base) { throw new System.ArgumentException("Not enough Digits were provided for the Base", "Digits"); } long result = 0; int sign = 0; int offset; string DIGITS = Digits.ToUpper(); foreach (char ch in Subject) { offset = Digits.IndexOf(ch); if ((offset == -1) || (offset >= Base)) { offset = DIGITS.IndexOf(char.ToUpper(ch)); } if ((offset != -1) && (offset < Base)) { result = result * Base + offset; if (sign == 0) { sign = 1; } } else { if ((sign == 0) && (ch == '-')) { sign = -1; } } } return (result * sign); }

这段代码首先检查输入的字符串是否为空,然后检查基数是否小于2。如果用户提供了自定义的字符集,则使用用户提供的字符集;否则,使用默认的字符集。然后,它遍历字符串中的每个字符,将其转换为数字,并累加到结果中。如果遇到负号,则将结果标记为负数。

数字到字符串的转换

将数字转换回字符串的过程与上述过程相反。以下是转换的实现:

public static string LongToString(long Subject, int Base, string Digits) { if (Base < 2) { throw new System.ArgumentException("Base must not be less than 2", "Base"); } if (Digits == null) { Digits = PIEBALD.Lib.LibStr.Digits; } if (Digits.Length < Base) { throw new System.ArgumentException("Not enough Digits were provided for the Base", "Digits"); } System.Text.StringBuilder result = new System.Text.StringBuilder(); int sign = 1; if (Subject < 0) { Subject *= sign = -1; } do { result.Insert(0, Digits[(int)(Subject % Base)]); Subject /= Base; } while (Subject > 0); if (sign == -1) { result.Insert(0, '-'); } return (result.ToString()); }

这段代码首先检查基数是否小于2,然后检查字符集的长度是否足够。如果用户提供了自定义的字符集,则使用用户提供的字符集;否则,使用默认的字符集。然后,它通过不断地取余数和除法操作,将数字转换为字符串。如果数字为负数,则在结果的开头添加负号。

添加分隔符

在某些情况下,可能需要在数字的字符串表示中添加分隔符,以提高可读性。这应该在另一个方法中实现,并考虑到文化差异。

例如,可以定义一个方法,用于在数字的字符串表示中添加逗号作为千位分隔符:

public static string AddSeparators(string Number) { return Number.Insert(Number.Length - 3, ","); }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485