Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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
如何在C++;? 如何在C++中转换大的EnDead和小的EnDon值? 我使用的是VC++6.0。当我使用_byteswap_ulong()函数时,它需要头文件intrin.h。 当我包含标头时,它会报告一个错误,称为Compatible compiler,intrin.h是用于gcc编译器的。 除了这个函数,VC++中还有其他函数可以在大端值和小端值之间进行转换吗?_C++_Visual Studio_Bytecode Manipulation - Fatal编程技术网

如何在C++;? 如何在C++中转换大的EnDead和小的EnDon值? 我使用的是VC++6.0。当我使用_byteswap_ulong()函数时,它需要头文件intrin.h。 当我包含标头时,它会报告一个错误,称为Compatible compiler,intrin.h是用于gcc编译器的。 除了这个函数,VC++中还有其他函数可以在大端值和小端值之间进行转换吗?

如何在C++;? 如何在C++中转换大的EnDead和小的EnDon值? 我使用的是VC++6.0。当我使用_byteswap_ulong()函数时,它需要头文件intrin.h。 当我包含标头时,它会报告一个错误,称为Compatible compiler,intrin.h是用于gcc编译器的。 除了这个函数,VC++中还有其他函数可以在大端值和小端值之间进行转换吗?,c++,visual-studio,bytecode-manipulation,C++,Visual Studio,Bytecode Manipulation,似乎说这些函数存在于stdlib.h中。在兼容POSIX的系统中,您有标准的byteswap(3)函数: #include <arpa/inet.h> uint32_t htonl(uint32_t hostlong); uint16_t htons(uint16_t hostshort); uint32_t ntohl(uint32_t netlong); uint16_t ntohs(uint16_t netshort); #define _BSD_SOURCE #inclu

似乎说这些函数存在于stdlib.h中。

在兼容POSIX的系统中,您有标准的byteswap(3)函数:

#include <arpa/inet.h>

uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
#define _BSD_SOURCE
#include <endian.h>

uint16_t htobe16(uint16_t host_16bits);
uint16_t htole16(uint16_t host_16bits);
uint16_t be16toh(uint16_t big_endian_16bits);
uint16_t le16toh(uint16_t little_endian_16bits);

uint32_t htobe32(uint32_t host_32bits);
uint32_t htole32(uint32_t host_32bits);
uint32_t be32toh(uint32_t big_endian_32bits);
uint32_t le32toh(uint32_t little_endian_32bits);

uint64_t htobe64(uint64_t host_64bits);
uint64_t htole64(uint64_t host_64bits);
uint64_t be64toh(uint64_t big_endian_64bits);
uint64_t le64toh(uint64_t little_endian_64bits);
#define bswap16(x) ((x)>>8 | ((x)&255)<<8)
#deinfe bswap32(x) ((bswap16((x)>>16)&65535)|(bswap16((x)&65535)<<16))
/* etc. */
#包括
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
如名称所示(主机到网络长、主机到网络短等),它们专门用于网络使用

GNU和BSD系统还提供endian(3)功能:

#include <arpa/inet.h>

uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
#define _BSD_SOURCE
#include <endian.h>

uint16_t htobe16(uint16_t host_16bits);
uint16_t htole16(uint16_t host_16bits);
uint16_t be16toh(uint16_t big_endian_16bits);
uint16_t le16toh(uint16_t little_endian_16bits);

uint32_t htobe32(uint32_t host_32bits);
uint32_t htole32(uint32_t host_32bits);
uint32_t be32toh(uint32_t big_endian_32bits);
uint32_t le32toh(uint32_t little_endian_32bits);

uint64_t htobe64(uint64_t host_64bits);
uint64_t htole64(uint64_t host_64bits);
uint64_t be64toh(uint64_t big_endian_64bits);
uint64_t le64toh(uint64_t little_endian_64bits);
#define bswap16(x) ((x)>>8 | ((x)&255)<<8)
#deinfe bswap32(x) ((bswap16((x)>>16)&65535)|(bswap16((x)&65535)<<16))
/* etc. */
\define\u BSD\u源
#包括
uint16(uint16主机16位);
uint16(uint16主机16位);
uint16字节(uint16字节);
uint16_t le16toh(uint16_t little_endian_16位);
uint32_t htobe32(uint32_t host_32位);
uint32_t htole32(uint32_t host_32位);
uint32字节(uint32字节);
uint32_t le32toh(uint32_t little_endian_32位);
uint64(uint64主机64位);
uint64(uint64主机64位);
uint64字节(uint64字节);
uint64_t le64toh(uint64_t little_endian_64位);
(在OpenBSD上,位宽度的数字始终位于函数的末尾:例如,be64toh()与betoh64()

否则,大多数人定义自己的宏或函数:

#include <arpa/inet.h>

uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
#define _BSD_SOURCE
#include <endian.h>

uint16_t htobe16(uint16_t host_16bits);
uint16_t htole16(uint16_t host_16bits);
uint16_t be16toh(uint16_t big_endian_16bits);
uint16_t le16toh(uint16_t little_endian_16bits);

uint32_t htobe32(uint32_t host_32bits);
uint32_t htole32(uint32_t host_32bits);
uint32_t be32toh(uint32_t big_endian_32bits);
uint32_t le32toh(uint32_t little_endian_32bits);

uint64_t htobe64(uint64_t host_64bits);
uint64_t htole64(uint64_t host_64bits);
uint64_t be64toh(uint64_t big_endian_64bits);
uint64_t le64toh(uint64_t little_endian_64bits);
#define bswap16(x) ((x)>>8 | ((x)&255)<<8)
#deinfe bswap32(x) ((bswap16((x)>>16)&65535)|(bswap16((x)&65535)<<16))
/* etc. */

#定义bswap16(x)((x)>>8(x)((x)和255)16和65535)(bswap16(x)和65535)如果你想在VC++中实现它,为什么gcc的错误很重要?无论如何,_byteswap_ulong不是一个标准函数。+1,但我认为你不需要使用内部函数,因为当你使用库函数时,它们会自动使用。我不依赖于此。我意识到一些工具链足够聪明,可以做到这一点,但我仍然没有看到编译器呃转一个fsqrt()调用3指令SSE等价物。greyfade:这取决于。VC++可以选择对内置函数使用内部函数。当然,您需要针对支持SSE的平台。GCC也有类似的选项。但当然,如果您不向编译器指定SSE可用,它将不会被使用。哦,我知道这一点。但即使是带有应用程序的GCC适当的三月切换有时仍然不能以这种方式进行优化。(或者,更确切地说,至少在GCC4之前没有。我最近没有做太多实验。我根本不依赖它。)从定义上讲,任何以下划线开头的东西都是非标准的。我不认为他要求的是标准的方式,他要求的是VC++的方式,除非我大错特错了?