在给定的程序中:
int main() {
char *p = "\0777";
printf("%d %d %d\n",p[0],p[1],p[2]);
printf("--%c-- --%c-- --%c--\n",p[0],p[1],p[2]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它显示输出为:
63 55 0
--?-- --7-- ----
我可以理解它正在将\0 (\077)之后的前两个字符从八进制转换为十进制,但是谁能解释我为什么是 2 个字符,为什么不是 1 或 3 或任何其他字符?
请解释这背后的逻辑。
我正在编写一个程序,将八进制数转换为小数.它编译正确和一切,但我的转换代码有一些重大错误.这对我来说似乎是完全合乎逻辑的,但不管怎样,当我运行程序时,转换是错误的(即1转换为36)有人可以指出出了什么问题?
public static int convert(int octal)
{
int d1=0,d2=0,d3=0,d4=0,d5=0,d6=0,d7=0,d8=0;
if(octal >=9999999){
d8 = (octal-(octal%10000000));}
if(octal >=999999){
d7 = (octal-(octal%1000000));}
if(octal >=99999){
d6 = (octal-(octal%100000));}
if(octal >=9999){
d5 = (octal-(octal%10000));}
if(octal >= 999){
d4 = (octal-(octal%1000));}
if(octal >= 99){
d3 = (octal-(octal%100));}
if(octal >= 9){
d2 = (octal-(octal%10));}
if(octal >= 0){
d1 = (octal-(octal%1));}
octal = (d8 * 8^7) + (d7 * 8^6) + (d6 * 8^5) + (d5 * 8^4) + (d4 * 8^3) + (d3 * 8^2) + (d2 …Run Code Online (Sandbox Code Playgroud) 我有一个简单的程序.
#include <cstdio>
int main()
{
int num = 000012345; printf("%d\n",num);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的程序给出了5349.为什么?我的意思是它应该是错的,但为什么5349?
我正在使用 printf 在 bash 脚本中格式化数字
printf "%04d" $input # four digits width with leading zeros if shorter
Run Code Online (Sandbox Code Playgroud)
如果input="011"printf 假定该值是八进制并返回0009而不是0011.
是否可以强制 printf 假设所有值都是十进制?
我想mkdir在python中使用。
它有一个参数mode,其默认值为'0o777'。
我知道0777Linux 中的文件模式。但是我不知道和o之间是什么。它是什么?0777
我正在尝试使用 Python 3 将带有八进制转义 Unicode 的字符串转换回正确的 Unicode 字符串,如下所示:
\n\n"training\\345\\256\\214\\346\\210\\220\\345\\276\\214.txt"是读入的字符串。
"training\xe5\xae\x8c\xe6\x88\x90\xe5\xbe\x8c.txt"是我试图获取的字符串的实际表示形式。
然而,在略读之后,似乎我能找到的 Python 3 的建议解决方案如下:
\n\ndecoded_string = bytes(myString, "utf-8").decode("unicode_escape")
不幸的是,当应用于我的示例时,这似乎会产生错误的 Unicode 字符串:
\n\n\'training\xc3\x83\xc2\xa5\xc3\x82\xc2\xae\xc3\x82\\x8c\xc3\x83\xc2\xa6\xc3\x82\\x88\xc3\x82\\x90\xc3\x83\xc2\xa5\xc3\x82\xc2\xbe\xc3\x82\\x8c.txt\'
这对于字节文字以及 Python 2 来说似乎很容易做到,但不幸的是对于 Python 3 中的字符串似乎并不那么容易。非常感谢您的帮助,谢谢!:)
\n例如,在c ++编写setprecision(12)时,12是10的基数,但是当你像setprecision(012)那样写它时,它是一个八进制数,为什么?
为什么会出现这种情况
long value = 123450;
System.out.println("value: " + value);
Run Code Online (Sandbox Code Playgroud)
价值:123450
long value = 0123450;
// ^
System.out.println("value: " + value);
Run Code Online (Sandbox Code Playgroud)
价值:42792
这是什么42792?
我在论坛上看到问题是我创建八进制而不是十进制,但我找不到在哪里更改我的代码来解决这个问题.
This is part of my code:
dd=1234567890aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
ddate=$(exiv2 "${i}"|grep timestamp)
SPEC=$ddate
read X X YEAR MONTH DAY HOUR MINUTE SECOND <<<${SPEC//:/ }
d1=${YEAR:2}
d2=${dd:(MONTH-1):1}
d3=${dd:(DAY-1):1}
d4=${dd:(HOUR-1):1}
d5=${dd:(MINUTE-1):1}
d6=${dd:(SECOND-1):1}
d7=0
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助!
octal ×10
decimal ×3
bash ×2
c ×2
c++ ×2
java ×2
literals ×2
string ×2
formatting ×1
long-integer ×1
printf ×1
python ×1
python-3.x ×1
swift ×1
unicode ×1