用户有没有办法用C或C ++输入二进制数?
如果我们写点像
int a = 0b1010;
std::cout << a << std::endl
然后输出结果为10(使用适当的编译器扩展时)。
但是当我们尝试写
时int n;
std::cin >> n;
int t = 0bn;
它给了我们一个错误,所以任何人都可以建议我们如何直接读取二进制数作为输入而不是使用字符串来存储输入?
答案 0 :(得分:7)
这里有点混乱,让我们稍微解开它。
0b1010
是一个整数文字,一个用基数2写的常量编译时整数值。同样,0xA
是基数为16的文字, 10
位于基数为10. 所有这些都指向相同的整数,它只是告诉编译器您指的是哪个数字的另一种方式。在运行时,在内存中,此整数始终表示为base-2数字。
std::cout << a
;取整数值a
并输出它的字符串表示。默认情况下,它在基数10中输出,但您可以使用std::hex
修饰符将其输出到基数为16. 没有预定义的修饰符以二进制打印。所以你需要自己做(或谷歌,这是一个常见的问题)。
0b
最后,仅用于定义整数文字。 不运行时运算符。回想一下,所有int
都表示为内存中的基数2。从机器的角度来看,其他基础不存在,int
是int
,因此无需转换。如果你需要从一个字符串中读取一个二进制数,你可以将反向代码转换为打印它的代码(std::cin >> n
假设输入是一个基数为10的数字,所以如果输入它会读取错误的数字实际上是打算在基地2)。
答案 1 :(得分:7)
虽然没有直接读取二进制数的函数,但有一些函数strtox
(其中x表示数据类型)将包含二进制数(或任何其他基数)的字符串转换为数值。
所以解决方法是首先将数字作为字符串读取然后转换它。
示例:
char input[100];
char *endpointer;
<read input using either C or C++ syntax>
int n = (int) strtol(input, &endpointer, 2);
答案 2 :(得分:1)
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let token = String(format: "%@", deviceToken as CVarArg)
.trimmingCharacters(in: CharacterSet(charactersIn: "<>"))
.replacingOccurrences(of: " ", with: "")
}
答案 3 :(得分:0)
要以二进制数字作为输入,我经常使用两种方法:
(主要提示:将输入作为字符串!!!使用:#include<string>
)
to_ulong()
模板的bitset
方法
bitset
#include<bitset>
库
示例:
string s;
cin>>s; // Suppose s = "100100101"
int n = (int) bitset<64>(s).to_ulong();
cout<<n; // 293
stoi()
库的string
方法
string
#include<string>
库
示例:
string s;
cin>>s; // Suppose s = "100100101"
int n = stoi(s, 0, 2);
cout<<n; // 293
探索
stoi()
here的格式。