将const char*=01000031525000315250分割成两个可以符合unsigned long long 类型的字符串
时间: 2024-11-16 19:19:51 浏览: 15
C语言常用数字和字符串转换函数
将十六进制数`01000031525000315250`分割成两个`unsigned long long`类型的字符串,意味着我们需要将其转换为两个64位的无符号整数。十六进制每个字符代表四位二进制数,所以我们需要每8位作为一个单独的`unsigned long long`存储。
原始十六进制字符串对应的二进制是:
```
01 00 00 31 52 50 00 31 52 50 00 31 52 50
```
我们可以按每8位分组:
```
01000031 // 第一个 unsigned long long
52500031 // 第二个 unsigned long long
52500031 // 又是一个 unsigned long long
```
转换后的两个字符串形式(十六进制表示)应该是这样的:
第一个 `unsigned long long`: `"01000031"`
第二个 `unsigned long long`: `"52500031"`
注意,由于二进制数据的前导零会被忽略,所以实际的二进制形式可能会有所不同,但展示出来的字符串就是上面的样子。如果你需要直接的数值,那么在C++中你可以这样做:
```cpp
#include <string>
#include <boost/hex.hpp>
std::string hexStrToULL(const std::string& str, size_t offset) {
boost::hex<> converter;
return converter.to_string(std::stoull(str.substr(offset, sizeof(unsigned long long)*2), nullptr, 16));
}
std::pair<std::string, std::string> splitHexIntoULLs(const std::string& input) {
std::string first = hexStrToULL(input, 0);
std::string second = hexStrToULL(input, sizeof(unsigned long long)*2);
return {first, second};
}
int main() {
std::string hexInput = "01000031525000315250";
auto ullPair = splitHexIntoULLs(hexInput);
std::cout << "First ULL: " << ullPair.first << std::endl;
std::cout << "Second ULL: " << ullPair.second << std::endl;
return 0;
}
```
阅读全文