gpt4 book ai didi

c++ - 将四个字符的字符串转换为长字符串

转载 作者:太空狗 更新时间:2023-10-29 20:00:32 25 4
gpt4 key购买 nike

我想将一个四字符的字符串(即四个字符)转换成一个long(即将它们转换成ASCII码然后放入long)。

据我了解,这是通过将第一个字符写入 long 的第一个字节,将第二个字符写入相邻的内存位置等来完成的。但我不知道如何在 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%08X\n", 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 格式字符串 ;-) 。)

关于c++ - 将四个字符的字符串转换为长字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6370894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com