Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将数字转换为任意基数?_C#_.net - Fatal编程技术网

C# 如何将数字转换为任意基数?

C# 如何将数字转换为任意基数?,c#,.net,C#,.net,我真正想做的是将DateTime.Now.Ticks转换为尽可能短的字符串,而不丢失任何精度。这怎么可能?假设我们使用的是7bit ASCII字符集。如果只使用可打印字符,则限制为32..127,因此这实际上是以96为基数。否则,以128为基数 要转换为基数96,请继续除以96。余数+32将是在正在生成的字符串前加上的字符。大概是这样的: static string ConvertBase96 (long value) { string str = ""; while (

我真正想做的是将DateTime.Now.Ticks转换为尽可能短的字符串,而不丢失任何精度。这怎么可能?假设我们使用的是7bit ASCII字符集。

如果只使用可打印字符,则限制为32..127,因此这实际上是以96为基数。否则,以128为基数

要转换为基数96,请继续除以96。余数+32将是在正在生成的字符串前加上的字符。大概是这样的:

  static string ConvertBase96 (long value) {
     string str = "";
     while (value > 0) {
        char rem = (char)((value % 96) + 32);
        str = rem.ToString () + str;
        value /= 96;
     }
     return str;
  }

我将使用
System.BitConverter
将long转换为字节数组,然后使用
System.convert.ToBase64String
。您可以在这两个类上使用相应的方法来反转它。

tarydon:回答得好。但我认为代码片段可能会帮助他,因为需要更多的迭代。您的解释将只返回最后一个base-96数字,即单位。我想你的意思是,值的模96,将(余数+32)前置到你拥有的数字字符串,从源值中减去它,除以96,然后重新开始。继续,直到你的值为零。@Lazarus:代码片段就是这样做的。我写了,一直除以96。另外,您不必从源值中减去它,因为您要将源值除以96。