【问题标题】:What is the C++ analog of C# byte[]?C# byte[] 的 C++ 类比是什么?
【发布时间】:2026-02-13 04:30:01
【问题描述】:

什么是 C# byte[] 的 C++(和/或 Visual-C++)类比?

【问题讨论】:

    标签: c# c++ visual-c++ bytearray byte


    【解决方案1】:

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

    等价物是uint8_t array[]

    uint8_t 在 stdint.h (C) 和 cstdint (C++) 中定义,如果您的系统上没有提供它们,您可以轻松下载它们,或者自己定义它们(参见this SO question)。

    【讨论】:

    • 或更传统的unsigned char
    • @theatrus,不,char 不保证是 8 位类型。
    • @praetorian: CHAR_BITS >=8。所以一个 char 不能小于 8 但它可以更大。 uint8_t 只需要支持 8 位操作。但是谁说编译器需要在 char 上建模 uint8_t。 linux.die.net/man/3/uint8_t
    • @Martin York:我不明白,你发布的链接有uint8_t,定义如下:typedef unsigned char uint8_t,所以它是以字符为模型的。如果 char 大于 8 位,uint8_t 也会如此。还是我错了?我之前所说的只是uint8_t 只是表明您的意图,即该变量应仅保存范围 [0 255] 内的值,但在某些平台上,没有什么能阻止您(除了糟糕的编程习惯)将更大的数字放入其中。
    • @Praetorian:在这个平台上它被定义为一个字符,因为它适用于这个平台。但是没有标准要求(我怀疑)它必须是一个字符(只是它需要是 8 位)。这是金霸王所说的另一种说法。
    【解决方案2】:

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

    例如

    在 C# 中

    byte[] array = new byte[10];
    

    在 C++ 中

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

    【讨论】:

    • 写你是,谢谢!)(帮助我的visual-C++ .net库)
    • 你不是说byte[] array = new byte[10]吗?
    • 是的,谢谢你的收获。我要指出,C++ 和 C# 数组有很多不同的地方。虽然两者都无法调整大小,但如果您尝试访问的数据多于可用数据,C# 会给您一个错误。如果幸运的话,C++ 可能会崩溃。另外,C# 可以随时告诉你数组的大小,C++ 无法告诉你数组创建后有多大,你必须记住一些方法。
    【解决方案3】:

    在 C++ 标准中,charsigned charunsigned char 是三种可用的字符类型。 char 可能是 signedunsigned,因此:

    typedef signed char sbyte;
    typedef unsigned char byte;
    
    byte bytes[] = { 0, 244, 129 };
    

    【讨论】: