C++ 17 中的 std::byte 是否等同于 C# 中的字节?
Is std::byte in C++ 17 equivalent to byte in C#?
我刚刚注意到 C++ 17 中的 std::byte
。
我问这个问题是因为我使用下面的代码将字节数组发送到 C++ 以播放音频声音。
C#:
[DllImport ("AudioStreamer")]
public static extern void playSound (byte[] audioBytes);
C++:
#define EXPORT_API __declspec(dllexport)
extern "C" void EXPORT_API playSound(unsigned char* audioBytes)
使用 C++ 17 中的新 byte
类型,看起来我 可能 现在可以做到这一点:
C#:
[DllImport ("AudioStreamer")]
public static extern void playSound (byte[] audioBytes);
C++:
#define EXPORT_API __declspec(dllexport)
extern "C" void EXPORT_API playSound(byte[] audioBytes)
我不确定这是否有效,因为我使用的编译器尚不支持 C++ 17 中的 byte
。
那么,C++ 17 中的 std::byte
是否等同于 C# 中的 byte
?有没有理由不使用 std::byte
而不是 unsigned char*
?
Like the character types (char, unsigned char, signed char) std::byte
can be used to access raw memory occupied by other objects.
这告诉我你可以自由更换
unsigned char audioBytes[]
和
std::byte audioBytes[]
在函数头中,如果您打算将字节视为字节而不是数字对象,一切都会正常进行。
std::byte
在某种意义上等同于 C++ 中的 unsigned char
和 char
,它是一种表示 1 个字节原始内存的类型。
如果您在界面中使用了 unsigned char*
,您可以轻松地将其替换为 std::byte
。
在你的 C# 代码中,这将导致根本没有任何变化,在 C++ 方面,这将使你的类型系统更加严格(这是一件好事),因为你将无法处理你的std::byte
s 作为文本字符或小整数。
当然,这是 C++17 的特性,您的编译器可能不支持它。
我刚刚注意到 C++ 17 中的 std::byte
。
我问这个问题是因为我使用下面的代码将字节数组发送到 C++ 以播放音频声音。
C#:
[DllImport ("AudioStreamer")]
public static extern void playSound (byte[] audioBytes);
C++:
#define EXPORT_API __declspec(dllexport)
extern "C" void EXPORT_API playSound(unsigned char* audioBytes)
使用 C++ 17 中的新 byte
类型,看起来我 可能 现在可以做到这一点:
C#:
[DllImport ("AudioStreamer")]
public static extern void playSound (byte[] audioBytes);
C++:
#define EXPORT_API __declspec(dllexport)
extern "C" void EXPORT_API playSound(byte[] audioBytes)
我不确定这是否有效,因为我使用的编译器尚不支持 C++ 17 中的 byte
。
那么,C++ 17 中的 std::byte
是否等同于 C# 中的 byte
?有没有理由不使用 std::byte
而不是 unsigned char*
?
Like the character types (char, unsigned char, signed char)
std::byte
can be used to access raw memory occupied by other objects.
这告诉我你可以自由更换
unsigned char audioBytes[]
和
std::byte audioBytes[]
在函数头中,如果您打算将字节视为字节而不是数字对象,一切都会正常进行。
std::byte
在某种意义上等同于 C++ 中的 unsigned char
和 char
,它是一种表示 1 个字节原始内存的类型。
如果您在界面中使用了 unsigned char*
,您可以轻松地将其替换为 std::byte
。
在你的 C# 代码中,这将导致根本没有任何变化,在 C++ 方面,这将使你的类型系统更加严格(这是一件好事),因为你将无法处理你的std::byte
s 作为文本字符或小整数。
当然,这是 C++17 的特性,您的编译器可能不支持它。