我正在尝试从国际象棋板数组初始化比特板。运行一个用于循环的循环并检查一件是否匹配,然后用64位数字字符串转换为二进制匹配件位置的二进制字符串。
for (int i=0;i<64;i++) {
Binary="0000000000000000000000000000000000000000000000000000000000000000";
Binary[i] = '1';
if(chessBoard[i/8][i%8] == "P"){
WP+=convertStringToBitboard(Binary);
}
对于我尝试过的转换stringtobitboard功能:
uint64_t convertStringToBitboard(std::string Binary){
char * ptr;
long long temp = std::stoull(Binary, &ptr, 2);
std::cout << temp << std::endl;
return temp;
}
以及
uint64_t convertStringToBitboard(std::string Binary){
std::bitset<64> x(std::string(Binary));
return x;
}
任何帮助都将不胜感激!
首先而不是使用字符串,您可以使用简单的shift
long long unsigned bin = 1LL << i;
除此之外,没有任何标准功能可以转换二进制文件。您可以通过循环浏览字符串元素并移动来发明一个。如下:
long long unsigned bin = 0;
for (int i = 0; i < 64; i++) {
long long unsigned bit = binaryString[i] - '0';
bin |= (bit << i);
}
使用 strtoull
,如下:
std::string s = "747";
int64_t n = std::strtoull(s.c_str(), NULL, 0);