数字表示类似于基本转换

时间:2013-06-03 18:09:44

标签: php string numbers base-conversion

我正在试图弄清楚如何进行基本转换(基数为36)使用0作为第一个字符。

我想使用1表示为0的方案来表示正整数,10表示为911表示为{ {1}},所以拥有,前导零是重要的。

所以a应该给我convert(36),然后z应该给我convert(37)

我认为这种格式与36基本类似,我应该可以使用base_convert来完成它,但我无法弄清楚如何。

2 个答案:

答案 0 :(得分:1)

这是一个按您想要的方式进行转换的功能。它可能会更有效地完成,但至少可以完成它:

function base_convert_0($number, $from_base, $to_base){
    $numeric = base_convert($number, $from_base, 10);

    $result = ''; 
    while($numeric > $to_base){
        $result = base_convert(($numeric - 1) % $to_base, 10, 36) . $result;

        $numeric = floor(($numeric - 1)/$to_base);
    }   
    $result = base_convert(($numeric - 1), 10, 36) . $result;

    return $result;
}

5000 lines of output

此处显示80行(base_convert_0($i, 10, 36)):

1: 0
2: 1
3: 2
4: 3
5: 4
6: 5
7: 6
8: 7
9: 8
10: 9
11: a
12: b
13: c
14: d
15: e
16: f
17: g
18: h
19: i
20: j
21: k
22: l
23: m
24: n
25: o
26: p
27: q
28: r
29: s
30: t
31: u
32: v
33: w
34: x
35: y
36: z
37: 00
38: 01
39: 02
40: 03
41: 04
42: 05
43: 06
44: 07
45: 08
46: 09
47: 0a
48: 0b
49: 0c
50: 0d
51: 0e
52: 0f
53: 0g
54: 0h
55: 0i
56: 0j
57: 0k
58: 0l
59: 0m
60: 0n
61: 0o
62: 0p
63: 0q
64: 0r
65: 0s
66: 0t
67: 0u
68: 0v
69: 0w
70: 0x
71: 0y
72: 0z
73: 10
74: 11
75: 12
76: 13
77: 14
78: 15
79: 16
80: 17

我不确定你是否需要改变这一点,但无论如何这都很容易:

function base_convert_un0($number, $from_base, $to_base){
    $as_string = strval($number);
    for($result = $j = 0, $i = strlen($as_string); $i--; $j++)
        $result += (base_convert($as_string{$i}, $from_base, 10) + 1)*pow($from_base, $j);
    return base_convert($result, 10, $to_base);
}

答案 1 :(得分:-1)

我真的不明白你转型的重点,但你不是只想尝试转换n-1吗?

base_convert ($number_to_convert - 1, 10, 36);

编辑:如果1 base 10 转换为0 你的特殊基地 - 你将用什么字符作为0?我认为您的系统不能用于有效的数字符号。

EDIT2 :我可能太过数学化了解这个问题。请参考@Paulpro的答案,找出问题的实用解决方案(实际上并没有转换到另一个基础,而是返回表示输入数字的字符串)。