什么是POSIX?我已阅读维基百科的文章,每次遇到这个词时我都会阅读它.事实是,我从来没有真正理解它是什么.
任何人都可以通过解释"对POSIX的需求"向我解释一下吗?
手册页htonl()似乎暗示您只能将其用于最多32位值.(实际上,ntohl()定义为无符号长整数,在我的平台上是32位.我想如果无符号长整数是8个字节,它将适用于64位整数).
我的问题是我需要将64位整数(在我的例子中,这是一个无符号长long)从big endian转换为little endian.现在,我需要进行特定的转换.但ntohl()如果目标平台WAS大端,如果函数(如)不会转换我的64位值,它会更好.(我宁愿避免添加我自己的预处理器魔法来做到这一点).
我可以用什么?如果它存在,我想要标准的东西,但我愿意接受实施建议.我在过去使用过工会看过这种类型的转换.我想我可以拥有一个带有unsigned long long和char [8]的联合.然后相应地交换字节.(显然会在大端的平台上破解).
我做了一些谷歌搜索,在这个问题上找不到任何好文章.在实现我想要与endian无关的应用程序时,我应该注意什么?
我正在研究一种以大端格式将64位值存储到内存中的函数.我希望我能编写可在小端和大端平台上运行的可移植C99代码,并让现代x86编译器bswap自动生成指令而不需要任何内置函数或内在函数.所以我开始使用以下功能:
#include <stdint.h>
void
encode_bigend_u64(uint64_t value, void *vdest) {
uint64_t bigend;
uint8_t *bytes = (uint8_t*)&bigend;
bytes[0] = value >> 56;
bytes[1] = value >> 48;
bytes[2] = value >> 40;
bytes[3] = value >> 32;
bytes[4] = value >> 24;
bytes[5] = value >> 16;
bytes[6] = value >> 8;
bytes[7] = value;
uint64_t *dest = (uint64_t*)vdest;
*dest = bigend;
}
Run Code Online (Sandbox Code Playgroud)
这适用于clang,它将此函数编译为:
bswapq %rdi
movq %rdi, (%rsi)
retq
Run Code Online (Sandbox Code Playgroud)
但是GCC 无法检测到字节交换 …
我正在做一个我需要的跨平台项目endian.h。但是此文件不在Windows或Mac OS X上。
有什么方法可以让我在没有文件的情况下正常工作,还是有办法获取文件?
我在编写网络软件时面临一些问题.当我尝试发送或接收包含8字节数据类型的结构时,下一个发送或接收的结构以某种方式受到影响.我有几点想法,但首先我想在进入调试之前确认一件事.我在64位x-86系统上使用32位Ubuntu 11.04(愚蠢的我).这与字节对齐问题有什么关系吗?
我正在开发一个控制器来与Open Flow交换机通信.openflow协议根据构建的交换机定义一组规范.问题是当我尝试与交换机通信时,一切正常,直到我发送或接收包含64位日期类型(uint64_t)的结构.用于发送和接收功能的特定结构是
estruct ofp_header {
uint8_t version; /* OFP_VERSION. */
uint8_t type; /* One of the OFPT_ constants. */
uint16_t length; /* Length including this ofp_header. */
uint32_t xid; /* Transaction id associated with this packet.
Replies use the same id as was in the request
to facilitate pairing. */};
assert(sizeof(struct ofp_header) == 8);
/* Switch features. */
struct ofp_switch_features {
struct ofp_header header;
uint64_t datapath_id; /* Datapath unique ID. The lower 48-bits are for a MAC address, …Run Code Online (Sandbox Code Playgroud) 我正在从ARM micro的SD卡中读取值:
Res = f_read(&fil, (void*)buf, 6, &NumBytesRead);
Run Code Online (Sandbox Code Playgroud)
where fil是指针,buf是存储数据的缓冲区。
这就是问题所在:这是一个数组,但我想将该数组的内容放在单个变量中。
举一个实际的例子:从文件中读取的6个字节是:
buf[0] = 0x1B
buf[1] = 0x26
buf[2] = 0xB3
buf[3] = 0x54
buf[4] = 0xA1
buf[5] = 0xCF
Run Code Online (Sandbox Code Playgroud)
我想拥有:uint64_t data等于 0x1B26B354A1CF。也就是说,数组的所有元素都以一个64位整数“级联”。