Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ VisualStudio确定端点_Visual C++_Visual Studio 2012_Audio Streaming_Endianness_Processor - Fatal编程技术网

Visual c++ VisualStudio确定端点

Visual c++ VisualStudio确定端点,visual-c++,visual-studio-2012,audio-streaming,endianness,processor,Visual C++,Visual Studio 2012,Audio Streaming,Endianness,Processor,所以我制作了一些音频处理DLL,我想知道如何确定处理器的端度。我知道VisualStudio定义了一些处理器宏,但我找不到它们的完整列表。我更希望这是一个编译时检查,因为我可能会为不同的处理器编译它 编辑:我的目标也是windows。我听说Windows只使用Little Endian,是真的吗?Visual Studio只提供识别平台的预处理器宏(如WIN32等)。可以在此处找到完整的列表:。不幸的是,它没有提供任何识别endianness的方法。从该列表中的平台目标宏中,必须确定该平台是大端

所以我制作了一些音频处理DLL,我想知道如何确定处理器的端度。我知道VisualStudio定义了一些处理器宏,但我找不到它们的完整列表。我更希望这是一个编译时检查,因为我可能会为不同的处理器编译它


编辑:我的目标也是windows。我听说Windows只使用Little Endian,是真的吗?

Visual Studio只提供识别平台的预处理器宏(如WIN32等)。可以在此处找到完整的列表:。不幸的是,它没有提供任何识别endianness的方法。从该列表中的平台目标宏中,必须确定该平台是大端还是小端。正如对这个问题的回答()中所述,Windows x86/x64始终是little endian


但是,不能保证Windows的未来更新不会以big-endian处理器为目标,但在这种情况下,此列表可能会更新。另外请注意,Visual Studio使用不同的编译器,目前的目标是使用big-endian的非Windows平台(例如Xbox 360)。

我找到了一种使用C预处理器确定endian的方法

请注意,我没有在big-endian机器上测试此代码

它使用了一些注册表值类型的定义[1]

REG_DWORD
在这里被定义为Windows运行的体系结构的终结性

\u byteswap\u TYPE
函数添加到混合中,我们可以编写预处理器定义[2]

#include <Windows.h>

#if REG_DWORD == REG_DWORD_LITTLE_ENDIAN
# define le_to_host_ulong(VAL) VAL
# define be_to_host_ulong(VAL) _byteswap_ulong(VAL)
# define le_to_host_ushort(VAL) VAL
# define be_to_host_ushort(VAL) _byteswap_ushort(VAL)
# define le_to_host_uint64(VAL) VAL
# define be_to_host_uint64(VAL) _byteswap_uint64(VAL)
#else
# define le_to_host_ulong(VAL) _byteswap_ulong(VAL)
# define be_to_host_ulong(VAL) VAL
# define le_to_host_ushort(VAL) _byteswap_ushort(VAL)
# define be_to_host_ushort(VAL) VAL
# define le_to_host_uint64(VAL) _byteswap_uint64(VAL)
# define be_to_host_uint64(VAL) VAL
#endif
#包括
#如果REG\u DWORD==REG\u DWORD\u LITTLE\u ENDIAN
#定义leu to_host_ulong(VAL)VAL
#定义be_to_host_ulong(VAL)_byteswap_ulong(VAL)
#定义le_to_host_ushort(VAL)VAL
#定义be_to_host_ushort(VAL)_byteswap_ushort(VAL)
#定义le_to_host_uint64(VAL)VAL
#定义be_to_host_uint64(VAL)_byteswap_uint64(VAL)
#否则
#定义le_to_host_ulong(VAL)_byteswap_ulong(VAL)
#定义be_to_host_ulong(VAL)VAL
#定义le_to_host_ushort(VAL)_byteswap_ushort(VAL)
#定义be_to_host_ushort(VAL)VAL
#定义le_to_host_uint64(VAL)_byteswap_uint64(VAL)
#定义be_to_host_uint64(VAL)VAL
#恩迪夫
[1]


[2]

Windows NT在MIPS、DEC Alpha和PowerPC CPU:s上运行,它们都是Big-Endian。但是,对这些CPU的支持在Windows 2000中有所下降。因此,除非您以WindowsNT为目标,否则您可以安全地假设系统是Litte-Endian。