将四个字符的字符串转换为长字符串
Converting a four character string to a long
我想将四个字符的字符串(即四个字符)转换为长字符串(即将它们转换为ASCII代码,然后放入长字符串)。
据我所知,这是通过将第一个字符写入长的第一个字节,将第二个字符写入相邻的内存位置,等等来完成的。但我不知道如何在C++中做到这一点。
有人能给我指正确的方向吗?
提前谢谢。
这是您的四个字符集:
const unsigned char buf[4] = { 'a', '0', '%', 'Q' };
现在我们组装一个32位无符号整数:
const uint32_t n = (buf[0]) | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << 24);
在这里,我假设buf[0]
是最不重要的一个;如果你想反其道而行之,就把指数互换一下。
让我们确认一下:
printf("n = 0x%08Xn", n); // we get n = 0x51253061
// Q % 0 a
重要信息:确保原始字节缓冲区是无符号的,否则添加显式强制转换,如(unsigned int)(unsigned char)(buf[i])
;否则换档操作没有被很好地定义。
警告语:比起可能诱人的const uint32_t n = *(uint32_t*)(buf)
,我更喜欢这个代数解决方案,它依赖于机器端序,如果你使用严格的混叠假设,会让你的编译器生气!
正如下面有益地指出的,你可以尝试通过不假设字节的比特大小来变得更加便携:
const unsigned very long int n = buf[0] |
(buf[1] << (CHAR_BIT) |
(buf[2] << (CHAR_BIT * 2) |
(buf[3] << (CHAR_BIT * 3) ;
根据需要,可以随意写下自己的概括!(祝你好运,找到合适的printf
格式字符串;-)
如果你的字节在你的机器上长时间的顺序是正确的,那么就使用memcpy,类似这样的东西-
#include <cstdlib>
#include <iostream>
int main()
{
char data[] = {'a', 'b', 'c', 'd'};
long result;
std::memcpy(&result, data, 4);
std::cout << result << "n";
}
请注意,这将取决于长字节排序的平台,这可能是您需要的,也可能不是。4被硬编码为simplecty的长的字节大小。当然,你不会在真正的程序中硬编码4。我尝试过的所有编译器在启用优化时都会优化memcpy,所以它可能也很高效。
编辑:继续轮班,添加其他人发布的答案,除非这符合您的特定要求,因为它更便携、更安全!
#include <string>
#include <iostream>
std::string fourCharCode_toString ( int value )
{
return std::string( reinterpret_cast<const char*>( &( value ) ), sizeof(int) );
}
int fourCharCode_toInt ( const std::string & value )
{
return *( reinterpret_cast<const int*>( value.data() ) );
}
int main()
{
int a = 'DROW';
std::string str = fourCharCode_toString( a );
int b = fourCharCode_toInt( str );
std::cout << str << "n";
}
相关文章:
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 如何将这个std::字符串转换为std::基本字符串
- 如何正确将字符串转换为标准::时间::system_clock::time_point?
- 如何在C++中将十六进制字符串转换为文本数据
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 如何从字符串转换为双精度*
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- 如何在C++中将 Python 字符串转换为其转义版本?
- 如何在 C++11 中将标准::字符串转换为标准::u32字符串?
- 如何将整数字符串转换为整数的二维向量?
- 使用 "stringstream " 将字符串转换为整数
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 将文件复制到自定义位置,存在字符串转换问题
- 将ANSI C字符串转换为UNICODE
- 如何将节点 V8 字符串转换为 C++ 字符串
- 在C++中将字符串转换为双精度,而无需科学记数法
- 使用从文件(stod、strtod、atof)中提取的数据C++从字符串转换为双精度.csv
- 如何在C++中将字符串转换为双精度?
- 将字符串转换为无符号字符数组/字节数组