是否有内置的方法将Ruby中的整数转换为十六进制等效?
与之相反的是String#to_i
:
"0A".to_i(16) #=>10
Run Code Online (Sandbox Code Playgroud)
或许像:
"0A".hex #=>10
Run Code Online (Sandbox Code Playgroud)
我知道如何自己动手,但使用内置的Ruby函数效率可能更高.
我正在尝试编写一个执行基本转换的C++程序.
我想将十进制数转换为2到20之间的所有其他整数基数.
对于基本转换,是否有一种高效且易于实现的算法?
假设我有一个最大的32位整数-
const a =
((2 ** 32) - 1)
const b =
parseInt("11111111111111111111111111111111", 2) // 32 bits, each is a one!
console.log(a === b) // true
console.log(a.toString(2))
// 11111111111111111111111111111111 (32 ones)
console.log(b.toString(2))
// 11111111111111111111111111111111 (32 ones)
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都很好。但是,现在让我们说我想使用八(8)个4位数字制作一个32位数字。这个想法很简单:将<<
每个4位序列移()到位置,然后将+
它们相加()-
const make = ([ bit, ...more ], e = 0) =>
bit === undefined
? 0
: (bit << e) + make (more, e + 4)
const print = n =>
console.log(n.toString(2))
// 4 bits
print(make([ 15 ])) // …
Run Code Online (Sandbox Code Playgroud)我想将我的二进制文件(在字符串中)转换为十六进制字符串,这只是一个程序片段,因为这个程序只是另一个更大的程序的一部分:
//the variable name of the binary string is: "binary"
int digitNumber = 1;
int sum = 0;
int test = binary.length()%4;
if(test!=0) {
binary = padLeft(binary, test);
}
for(int i = 0; i < binary.length(); i++){
if(digitNumber == 1)
sum+=Integer.parseInt(binary.charAt(i) + "")*8;
else if(digitNumber == 2)
sum+=Integer.parseInt(binary.charAt(i) + "")*4;
else if(digitNumber == 3)
sum+=Integer.parseInt(binary.charAt(i) + "")*2;
else if(digitNumber == 4 || i < binary.length()+1){
sum+=Integer.parseInt(binary.charAt(i) + "")*1;
digitNumber = 0;
if(sum < 10)
System.out.print(sum);
else if(sum == 10)
System.out.print("A"); …
Run Code Online (Sandbox Code Playgroud) 我需要打印一些数据(格式有点奇怪).我用PHP编写了if($ num%10 == 9),但我无法获得正确的输出.
所以看看这个例子.我们在文件夹中有x个文件.对于这个例子,x = 36.X总是众所周知的.
输出应如下所示:
01
02
03
04
05
06
07
08
09
0a
0b
0c
0d
0e
0f
10
11
...
19
1a
...
1f
20
...
24
Run Code Online (Sandbox Code Playgroud)
对于这么长的"清单"感到抱歉,但我相信你现在知道我需要什么.因此,在以9结尾的每个数字之后,我们有num(a,b,c,d,e,f),然后是数字,它跟在前面的数字后面,结尾是9.(例如3a ... 3f,40..49).最重要的是印刷线的数量必须等于x.
如果可能的话,我更喜欢PHP或Java代码,但我会非常感谢任何帮助.
我想写一个程序,从十进制转换为否定.
我无法弄清楚如何从十进制转换为否定.
我不知道如何找到规则及其工作原理.
例: 7(base10)-->11011(base-2)
我才知道7 = (-2)^0*1 + (-2)^1*1 + (-2)^2*0 + (-2)^3*1 + (-2)^4*1
.
我想反转以下bash
命令执行的操作:
$ echo $((62#a39qrT))
9207903953
Run Code Online (Sandbox Code Playgroud)
即将十进制9207903953转换为基数62,保持bash
标准{0..9},{a..z},{A..Z}
.
我知道我可以通过使用来实现这一点bc
,但我必须手动转换每个字符.例如,我目前这样做:
BASE62=($(echo {0..9} {a..z} {A..Z}))
for i in $(echo "obase=62; 9207903953" | bc)
do
echo -n ${BASE62[$i]} #Doesn't work if bc's output contains leading zeroes
done
Run Code Online (Sandbox Code Playgroud)
必须有一种方法以较少"黑客"的方式做到这一点.你知道如何更有效地做到这一点吗?
编辑:更改bc
输入.
我可以做这个:
int main(int argc, char** argv) {
unsigned char cTest = 0xff;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是通过命令行将十六进制数字输入程序的正确方法是什么?
unsigned char cTest = argv[1];
没有办法.这产生了一个初始化,从指针生成整数而没有强制转换警告
我需要将一个大的(对于内置数据类型来说太大)十六进制字符串转换为带有十进制表示的字符串.例如:
std::string sHex = "07AA17C660F3DD1D2A1B48F1B746C148";
std::string sDec; // should end up with: "10187768649047767717933300899576725832"
Run Code Online (Sandbox Code Playgroud)
我目前正在使用c ++ BigInt类,它提供了一种非常简单的方法来实现这一目标(但仅限GPL):
BigInt::Vin vbiTemp(sHex, 16);
sDec = vbiTemp.toStrDec();
Run Code Online (Sandbox Code Playgroud)
没有第三方算术库,有没有简单的方法来进行这种转换?或者你能推荐一个类似简单的免费(非GPL)替代方案(效率无关紧要)?
最近,我读到古巴比伦文明使用以 60 为基数而不是 10 为基数的数字系统。即使使用以 60 为基数的数字系统,他们仍然能够近似计算 2 \xe2\x80\x94 的平方根,并且几千年前也是如此!
\n\n我对此很好奇,想看看如何将十进制(以 10 为基数)中的数字转换为六十进制(以 60 为基数)。使用 R 编程语言,我找到了此链接,其中提供了有关将数字从某个基数转换为不同基数的答案。
\n然而,这里似乎基数只能在 2 到 36 之间(我想要基数 60):
\nbase <- function(b, base = 10)\n{\n base <- as.integer(base)\n if(base > 36 | base < 2) stop("\'base\' must be between 2 and 36.")\n \n structure(lapply(b, function(x) \n {\n n <- ceiling(log(x, base))\n vec <- numeric()\n val <- x\n \n while(n >= 0)\n {\n rem <- val %/% base^n\n val …
Run Code Online (Sandbox Code Playgroud)