代码之家  ›  专栏  ›  技术社区  ›  Carvellis

Int32的最短字符串表示法

  •  1
  • Carvellis  · 技术社区  · 15 年前

    我需要转换一个 Int32 必须在Web窗体上输入的代码。为了让访问者更简单,这个代码需要尽可能简单和简短。

    有人知道转换 英特32 仅使用[0-9]和[A-Z]可以得到最短的字符串表示?

    6 回复  |  直到 8 年前
        1
  •  6
  •   Marc Gravell    15 年前

    能够 编码到base-36,但是为了每个人的理智(不仅仅是你的用户,处理i vs 1,o vs 0等),我建议只使用hex;加上它内置于:

        int value = 22334;
        string hex = Convert.ToString(value, 16); // 573e
        value = Convert.ToInt32(hex, 16);
    
        2
  •  6
  •   Cody Gray Felix    8 年前

    base 36 表达就是你想要的。它使用字母和数字符号来编码数字,以实现非常紧凑的表示。

        3
  •  1
  •   Tom Gullen    15 年前

    举个例子,我还没有查到这方面的所有细节。

    给定32位int:

    将其拆分为8x4位

    4位数组给出2^4=16个可能的组合

    然后将4位的每个文字值与以小写字母A或其他形式开头的ASCII字符代码匹配。

        4
  •  0
  •   Lee    15 年前
    string s = code.ToString();
    
        5
  •  0
  •   Simon Fischer    15 年前

    您可以使用 Encoding 获取字符串的类:

    int value = 1234;
    string intString = Encoding.Default.GetString(BitConverter.GetBytes(value));
    

    而不是默认编码,您可以选择您想要的任何一种。

        6
  •  0
  •   Chris Travers    8 年前

    您有几个选择:

    1. base36满足您的规定要求
    2. base64较短,但您有摆脱final='s的问题

    你的一个基本问题是,你做得越短,就越难正确记忆。所以你需要考虑一下你是想复制/粘贴还是想让人们记住。

    对于复制/粘贴,我可能会使用给定的对齐base64,以避免在末尾使用等号(但您可以将=改为并在服务器上重新转换)。

    为了便于人类阅读,建议做一些其他的事情。