C++中与C# byte[]相对应的是什么?

8

C++(和/或Visual-C++)中与C# byte[]相对应的是什么?

3个回答

12

byte[]在C#中是一个无符号8位整数(byte)数组。

对应的C语言类型为uint8_t array[]

uint8_t在C语言的stdint.h库和C++的cstdint库中有定义。如果你的系统没有提供这些库,你可以轻松地下载它们或自行定义它们(参见这个SO问题)。


3
更常规的说法是“无符号字符(unsigned char)”。 - Yann Ramin
3
@theatrus,不,char并不保证是一个8位的类型。 - Bertrand Marron
2
@praetorian:CHAR_BITS >= 8。因此,char 的大小不能小于8,但可以更大。uint8_t 只需要支持8位操作。但是谁说编译器必须将 uint8_t 建模为 char。http://linux.die.net/man/3/uint8_t - Martin York
1
@Martin York:我不明白,你发布的链接中将uint8_t定义为typedef unsigned char uint8_t,因此它是基于char建模的。如果char比8位更大,则uint8_t也会更大。或者我错了吗?我之前说的只是uint8_t仅表示您的意图,即该变量应仅保持[0 255]范围内的值,但在某些平台上,除了糟糕的编程实践外,没有任何阻止您将更大的数字插入其中。 - Praetorian
2
@Praetorian:在这个平台上,它被typedef为char类型,因为这个平台可以处理这种类型。但是没有标准要求(我猜测)一定要是char类型(只需要8位即可)。这跟Duracell所说的是一个意思。 - Martin York
显示剩余6条评论

6

在C++中,最接近的等效类型应该是动态创建的“unsigned char”数组(除非你在运行定义字节为8位以外的处理器上)。

因此例如:

在C#中

byte[] array = new byte[10];

在C++中

unsigned char *array = new unsigned char[10];

你写的非常好,谢谢!(帮助我处理了我的Visual-C++ .net库) - Rella
2
你是不是指的是 byte[] array = new byte[10] - Anthony
是的,感谢你发现了这个问题。我想指出C++和C#数组有很多不同的地方。虽然两者都无法调整大小,但如果尝试访问超过可用数据的数据,C#会给出错误。如果你很幸运,C++可能会崩溃。此外,C#可以随时告诉你数组的大小,而C++不能在创建后告诉你数组的大小,你必须记住它的大小。 - MerickOWA

6
在C++标准中,charsigned charunsigned char是三种可用的字符类型。char可能是signedunsigned,因此:
typedef signed char sbyte;
typedef unsigned char byte;

byte bytes[] = { 0, 244, 129 };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接