如何将Long转换为base36?您的回答可以解释您是如何得出答案的?
我已经检查了scaladocs for Long转换为不同的基础,以及将Long转换为BigInt.我看到BigInt确实有toString( base )这样的解决方案可能涉及改变类型,但我无法弄清楚如何.
注意:我是scala/java/type-safe语言的新手,所以我可能会忽略一些微不足道的东西.
出现了一种情况,我需要在SQL语句的上下文中执行基本36到10的转换.Oracle 9或Oracle 10中似乎没有内置任何东西来解决这类问题.我的Google-Fu和AskTom建议创建一个pl/sql函数来处理这个任务.在这一点上,这不是我的选择. 我正在寻找有关可能有助于我解决此问题的方法的建议.
把它变成视觉形式......
WITH
Base36Values AS
(
SELECT '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' myBase36 FROM DUAL
),
TestValues AS
(
SELECT '01Z' BASE36_VALUE,
71 BASE10_VALUE FROM DUAL
)
SELECT *
FROM Base36Values,
TestValues
Run Code Online (Sandbox Code Playgroud)
我正在寻找根据输入01Z计算值71的东西. 编辑 - 即向后......给定01Z将其翻译为71.
作为贿赂,每个有用的答案获得免费的投票.
谢谢
邪恶.
我希望能够获取任意字符串,通过散列函数(如MD5)运行它,然后在base-36中解释生成的摘要.
我知道在Ruby中已经存在一个Digest库,但据我所知,我无法得到摘要的原始字节; 该to_s函数被映射到hexdigest,当然,它是base-16.
strtoi(x,base=36) 将base36编码的字符串转换为整数:
strtoi("zzzz",base=36)
[1] 1679615
Run Code Online (Sandbox Code Playgroud)
有没有一个函数反转这个操作,即,给定一个正整数产生base36等价?基本上,我正在寻找一个itostr()这样的功能
itostr(1679615,base=36)
[1] "zzzz"
Run Code Online (Sandbox Code Playgroud)
(除了36之外我不需要任何基础,但是base参数会很好.)
我有点迷茫.对于一个项目,我需要使用base 36将哈希函数(SHA256)的输出(字节数组)转换为String.
所以最后,我想转换哈希的(Hex-String表示),即
43A718774C572BD8A25ADBEB1BFCD5C0256AE11CECF9F9C3F925D0E52BEAF89
Run Code Online (Sandbox Code Playgroud)
到base36,所以上面的示例String将是:
3SKVHQTXPXTEINB0AT1P0G45M4KI8U0HR8PGB96DVXSTDJKI1
Run Code Online (Sandbox Code Playgroud)
对于实际转换为base36,我在StackOverflow上找到了一些代码:
public static String toBase36(byte[] bytes) {
//can provide a (byte[], offset, length) method too
StringBuffer sb = new StringBuffer();
int bitsUsed = 0; //will point how many bits from the int are to be encoded
int temp = 0;
int tempBits = 0;
long swap;
int position = 0;
while((position < bytes.length) || (bitsUsed != 0)) {
swap = 0;
if(tempBits > 0) {
//there are bits left over from previous iteration
swap …Run Code Online (Sandbox Code Playgroud) 目前我正在使用一种算法将一个普通字符串编码为Base36字符串.
我尝试了以下但它不起作用.
public static String encode(String str) {
return new BigInteger(str, 16).toString(36);
}
Run Code Online (Sandbox Code Playgroud)
我想这是因为字符串不仅仅是十六进制字符串.如果我使用字符串"Hello22334!" 在Base36,然后我得到了NumberFormatException.
我的方法是将每个字符转换为数字.将数字转换为十六进制表示,然后将hexstring转换为Base36.
我的方法是否正常还是有更简单或更好的方法?
我有兴趣创建像链接一样的小网址.我的想法是简单地为发布的每个长URL存储递增标识符,然后将此id转换为它的基本36变体,如下面的PHP中所示:
$tinyurl = base_convert($id, 10, 36)
Run Code Online (Sandbox Code Playgroud)
这里的问题是结果是可猜测的,虽然必须很难猜出下一个网址是什么,但仍然很短(很小).例如.如果我的最后一个小小的是a1,那么下一个将是a2.这对我来说是件坏事.
那么,我如何确保生成的小网址不是可猜测但仍然很短?
有一个有趣的问题 - 我需要将2个(随机)生成的Guid转换为字符串.以下是约束:
到目前为止,我已经浏览了很多寻找到底池36的转换,但是Guid没有运气.
有任何想法吗?(C#)
我注意到在将字符串转换为base36时,Python和JavaScript之间存在一些不一致.
Python方法:
>>> print int('abcdefghijr', 36)
Run Code Online (Sandbox Code Playgroud)
结果:37713647386641447
Javascript方法:
<script>
document.write(parseInt("abcdefghijr", 36));
</script>
Run Code Online (Sandbox Code Playgroud)
结果:37713647386641450
是什么导致两种语言之间的不同结果?无论语言如何,产生相同结果的最佳方法是什么?
谢谢.
我目前正在编写一段使用 base 36 编码的 JavaScript。
我遇到了这个问题:
parseInt("welcomeback",36).toString(36)
Run Code Online (Sandbox Code Playgroud)
看来要回来了"welcomebacg"。
我在 Chrome 开发人员的控制台和 Node.js 中对此进行了测试,结果相同。
这个结果有什么合乎逻辑的解释吗?