C++ 转换为C++;将字节数组转换为C字符串
我试图用C语言将字节数组转换成字符串,但我不太明白 <>我有一个C++的例子,但是我需要把它转换成C.< < C++代码如下:C++ 转换为C++;将字节数组转换为C字符串,c++,c,arrays,string,C++,C,Arrays,String,我试图用C语言将字节数组转换成字符串,但我不太明白 我有一个C++的例子,但是我需要把它转换成C.< < C++代码如下: #include <iostream> #include <string> typedef unsigned char BYTE; int main(int argc, char *argv[]) { BYTE byteArray[5] = { 0x48, 0x65, 0x6C, 0x6C, 0x6F }; std::string s(r
#include <iostream>
#include <string>
typedef unsigned char BYTE;
int main(int argc, char *argv[])
{
BYTE byteArray[5] = { 0x48, 0x65, 0x6C, 0x6C, 0x6F };
std::string s(reinterpret_cast<char*>(byteArray), sizeof(byteArray));
std::cout << s << std::endl;
return EXIT_SUCCESS;
}
#包括
#包括
typedef无符号字符字节;
int main(int argc,char*argv[])
{
字节字节数组[5]={0x48,0x65,0x6C,0x6C,0x6F};
std::字符串s(重新解释cast(byteArray),sizeof(byteArray));
C中的std::cout字符串是以零结尾的字节数组。因此,您只需将数组复制到一个新的缓冲区中,该缓冲区中有足够的空间容纳尾随的零字节:
#include <string.h>
#include <stdio.h>
typedef unsigned char BYTE;
int main() {
BYTE byteArray[5] = { 0x48, 0x65, 0x6C, 0x6C, 0x6F };
char str[(sizeof byteArray) + 1];
memcpy(str, byteArray, sizeof byteArray);
str[sizeof byteArray] = 0; // Null termination.
printf("%s\n", str);
}
#包括
#包括
typedef无符号字符字节;
int main(){
字节字节数组[5]={0x48,0x65,0x6C,0x6C,0x6F};
char str[(byteArray的大小)+1];
memcpy(str、byteArray、byteArray大小);
str[sizeof byteArray]=0;//空终止。
printf(“%s\n”,str);
}
C中的字符串是以零结尾的字节数组。因此,您只需将数组复制到一个新的缓冲区中,该缓冲区中有足够的空间容纳尾随的零字节:
#include <string.h>
#include <stdio.h>
typedef unsigned char BYTE;
int main() {
BYTE byteArray[5] = { 0x48, 0x65, 0x6C, 0x6C, 0x6F };
char str[(sizeof byteArray) + 1];
memcpy(str, byteArray, sizeof byteArray);
str[sizeof byteArray] = 0; // Null termination.
printf("%s\n", str);
}
#包括
#包括
typedef无符号字符字节;
int main(){
字节字节数组[5]={0x48,0x65,0x6C,0x6C,0x6F};
char str[(byteArray的大小)+1];
memcpy(str、byteArray、byteArray大小);
str[sizeof byteArray]=0;//空终止。
printf(“%s\n”,str);
}
C字符串以null结尾,因此对于null结尾符,字符串的大小将是数组的大小加上1。然后可以使用复制字符串,如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef unsigned char BYTE;
int main(void)
{
BYTE byteArray[5] = { 0x48, 0x65, 0x6C, 0x6C, 0x6F };
// +1 for the NULL terminator
char str[sizeof(byteArray) + 1];
// Copy contents
memcpy(str, byteArray, sizeof(byteArray));
// Append NULL terminator
str[sizeof(byteArray)] = '\0';
printf("%s\n", str);
return EXIT_SUCCESS;
}
#包括
#包括
#包括
typedef无符号字符字节;
内部主(空)
{
字节字节数组[5]={0x48,0x65,0x6C,0x6C,0x6F};
//+1表示空终止符
字符str[sizeof(byteArray)+1];
//复制内容
memcpy(str,byteArray,sizeof(byteArray));
//附加空终止符
str[sizeof(byteArray)]='\0';
printf(“%s\n”,str);
返回退出成功;
}
输出:
你好
C字符串以null结尾,因此对于null结尾符,字符串的大小将是数组的大小加上1。然后可以使用复制字符串,如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef unsigned char BYTE;
int main(void)
{
BYTE byteArray[5] = { 0x48, 0x65, 0x6C, 0x6C, 0x6F };
// +1 for the NULL terminator
char str[sizeof(byteArray) + 1];
// Copy contents
memcpy(str, byteArray, sizeof(byteArray));
// Append NULL terminator
str[sizeof(byteArray)] = '\0';
printf("%s\n", str);
return EXIT_SUCCESS;
}
#包括
#包括
#包括
typedef无符号字符字节;
内部主(空)
{
字节字节数组[5]={0x48,0x65,0x6C,0x6C,0x6F};
//+1表示空终止符
字符str[sizeof(byteArray)+1];
//复制内容
memcpy(str,byteArray,sizeof(byteArray));
//附加空终止符
str[sizeof(byteArray)]='\0';
printf(“%s\n”,str);
返回退出成功;
}
输出:
你好
这里有一个演示程序,展示了如何实现这一点
#include <stdio.h>
#include <string.h>
typedef unsigned char BYTE;
int main(void)
{
BYTE byteArray[5] = { 0x48, 0x65, 0x6C, 0x6C, 0x6F };
char s[sizeof( byteArray ) + sizeof( ( char )'\0' )] = { '\0' };
memcpy( s, byteArray, sizeof( byteArray ) );
puts( s );
return 0;
}
请注意,字符数组是零初始化的。否则,在调用memcpy后,您必须“手动”追加终止零
或
当字符数组的大小远大于byteArray的大小时,应使用最后一个变量。下面是一个演示程序,演示了如何执行此操作
#include <stdio.h>
#include <string.h>
typedef unsigned char BYTE;
int main(void)
{
BYTE byteArray[5] = { 0x48, 0x65, 0x6C, 0x6C, 0x6F };
char s[sizeof( byteArray ) + sizeof( ( char )'\0' )] = { '\0' };
memcpy( s, byteArray, sizeof( byteArray ) );
puts( s );
return 0;
}
请注意,字符数组是零初始化的。否则,在调用memcpy后,您必须“手动”追加终止零
或
当字符数组的大小远大于byteArray的大小时,应使用最后一个变量。字符串是一个以'\0'
字符结尾的字节数组。因此,是的,您也需要它的大小来容纳它。您是否缺少空终止符?@Leedinelcrocker请实际阅读问题,而不仅仅是代码。OP有C++代码,但是他们想知道如何在C.@康拉德OK中做同样的事情,抱歉我弄错了。我会添加两个标签。任何人都不同意,把它放到Meta上,而不是用编辑来破坏这个问题。String是一个字节数组,它终止代码< > 0”< /Cord>字符。所以,你也需要它的大小来适应它。请删除一个空的终结符?@ LeeDaNIELCROKER请实际阅读这个问题,而不仅仅是代码。OP有C++代码;但是他们想知道如何在C.@康拉德OK中做同样的事情,抱歉弄乱了。我会读错。我会添加两个标签。任何人都同意把它放到Meta上,而不是用编辑来破坏这个问题。你错过了<代码>。0'
。它看起来很慢。为什么要在复制之前清除整个缓冲区?另外,strcpy()
是不正确的,因为源代码不是以null结尾的。@AlexisWilke是的,我可以memcpy()
,也不需要强制转换。确实不需要清除,我可以只附加空终止符,对吗?您缺少'\0'
。它看起来很慢。为什么在复制之前清除整个缓冲区?另外strcpy()
是不正确的,因为源代码不是空终止的。@Alexiswillke,我可以只memcpy()
,它也不需要强制转换。确实不需要清除,我可以添加空终止符,对吗?@πάνταῥεῖ 每一个都改变了我的OP标签。第一行说明了代码是C++的,但是我希望它在C中。able@DanJamesPalmer请不要玩游戏,甚至无意中。如果你想要C,请给我们展示C代码。不要用C++来演示C代码。这是两种不同语言,有不同的工具和方法。适合C++的代码是不是一个混淆两个原因的原因。@ TADMAN是一个不公平的指责。标签上写着C,标题是C,这个问题的主体说C. We(Me包括在内)只是在C++代码中跳过,忽略了标签和标题如巴甫洛夫犬中的C。(因为我们习惯于期望两种语言之间出现错误标记)但是问题清楚地说明了C++代码的原因,以及它是如何相关的和合法的。@ KonradRudolph有一个C++代码,它是一个红色鲱鱼,这是不需要的。我认为如果在问题中存在C++代码,它是定义为C++的问题,应该被标记为这样。