- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用 C++ 与 Ada 代码进行交互,因此我正在使用位字段定义一个结构,以便所有数据在两种语言中都位于同一位置。以下内容不完全是我在做什么,但概述了问题。以下也是 VS2008 中的控制台应用程序,但这不是特别相关。
using namespace System;
int main() {
int array1[2] = {0, 0};
int *array2 = new int[2]();
array2[0] = 0;
array2[1] = 0;
#pragma pack(1)
struct testStruct {
// Word 0 (desired)
unsigned a : 8;
unsigned b : 1;
bool c : 1;
unsigned d : 21;
bool e : 1;
// Word 1 (desired)
int f : 32;
// Words 2-3 (desired)
int g[2]; //Cannot assign bit field but takes 64 bits in my compiler
};
testStruct test;
Console::WriteLine("size of char: {0:D}", sizeof(char) * 8);
Console::WriteLine("size of short: {0:D}", sizeof(short) * 8);
Console::WriteLine("size of int: {0:D}", sizeof(int) * 8);
Console::WriteLine("size of unsigned: {0:D}", sizeof(unsigned) * 8);
Console::WriteLine("size of long: {0:D}", sizeof(long) * 8);
Console::WriteLine("size of long long: {0:D}", sizeof(long long) * 8);
Console::WriteLine("size of bool: {0:D}", sizeof(bool) * 8);
Console::WriteLine("size of int[2]: {0:D}", sizeof(array1) * 8);
Console::WriteLine("size of int*: {0:D}", sizeof(array2) * 8);
Console::WriteLine("size of testStruct: {0:D}", sizeof(testStruct) * 8);
Console::WriteLine("size of test: {0:D}", sizeof(test) * 8);
Console::ReadKey(true);
delete[] array2;
return 0;
}
(如果不清楚,在实际程序中,基本思想是程序从与 Ada 代码通信的东西中获取 void*
并将其转换为 testStruct *
访问数据。)
注释掉#pragma pack(1)
后,输出为:
size of char: 8
size of short: 16
size of int: 32
size of unsigned: 32
size of long: 32
size of long long: 64
size of bool: 8
size of int[2]: 64
size of int*: 32
size of testStruct: 224
size of test: 224
显然 4 个字(索引为 0-3)应该是 448 = 32*4 = 128 位,而不是 224。其他输出行用于帮助确认 VS2008 下类型的大小编译器。
在 #pragma pack(1)
未注释的情况下,该数字(在输出的最后两行)减少到 176
,它仍然大于 128。它似乎 bool 值没有与“Word 0”中的无符号整数打包在一起。
注意:a&b、c、d、e、f,用不同的词打包就是5,数组+2=7个词,乘以32位=224
,我们得到的数字#pragma pack(1)
注释掉了。如果 c 和 e( bool 值)各占 8 位,而不是 32 位,我们得到 176
,这是我们用 #pragma pack(1)
得到的数字> 未评论。似乎 #pragma pack(1)
只允许 bools 自己打包成单个字节,而不是单词,但根本不允许带有无符号整数的 bools。
所以我的问题,一句话:有没有办法强制编译器将 a 到 e 打包成一个词?相关的是这个问题:C++ bitfield packing with bools ,但这并没有回答我的问题;它只会指出我试图强制消失的行为。
如果真的没有办法做到这一点,有没有人有任何解决方法的想法?我很茫然,因为:
()
之后,所以它会看起来有点古怪和迟钝,几乎需要 IntelliSense 或反复试验才能记住哪些需要 ()
哪些不需要。testStruct
创建一个构造函数,它接受一个 testStructImport
类型的对象)因为实际结构很长,有很多位域指定的变量。最佳答案
我建议您创建一个没有任何位压缩的“正常”结构。为成员使用默认的 POD 类型。
创建接口(interface)函数,用于从缓冲区 (uint8_t) 加载“正常”字段,并存储到缓冲区。
这将允许您在程序中以合理的方法使用数据成员。位打包和解包将由接口(interface)函数处理。 bit twiddling 应该使用按位 AND 和按位 OR 函数,而不是依赖于结构中的位域符号。这将允许您调整位旋转并在编译器之间更具可移植性。
这就是我设计协议(protocol)类的方式。而且我不必担心位域定位、Endianess 或类似的事情。
另外,我可以使用 block I/O 来读取和写入缓冲区。
关于c++ - 用位域打包 bools (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24765685/
我有一个带有列的表提供者 implied(tiny int)(something like nullable bool) provi
我正在阅读 VideoFileWriter来自 AForge.Video.FFMPEG 的类(class)通过 ILSPY 组装(我很想看看特定方法是如何工作的)并发现了这个: public bool
这是我的完整代码... import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import
我有一个输入 list类型 [Maybe SomeType]和一个谓词 p类型 SomeType -> Bool ,我想回答这个问题“谓词 p 是否适用于所有碰巧在输入中的 SomeType ?”。
使用 !!x 有什么区别吗?对比(bool)x ? 假设__STDC_VERSION__ >= 199901L和 #include 他们都保证结果是0吗?或 1 ,并且无论 x 的大小和值如何,都不
我正在编写一些 C++ 代码,我想调用两个函数(checkXDirty 和 checkYDirty),并返回 true如果任一返回 true。即使一个返回 true 我也需要评估两者,所以我的第一个想
我注意到 bool在 QtCreator 中以不同于其他类型的颜色突出显示: 只有在包含某些 header 时才会发生这种情况,最终我将其追踪到 . QtCreator 的代码检查器似乎无法手动跟踪
有一个函数: func (first: Int) -> Int -> Bool -> String { return ? } 返回值怎么写?我对上面 func 的返回类型感到很困惑。 最
训练神经网络学习“异或” 我正在尝试使用“批量归一化”,我创建了一个批量归一化层函数“batch_norm1”。 import tensorflow as tf import nump
我已经创建了任务函数来验证我的 json 文件。一切正常,直到我没有使用结果。当我试图从 async task function 获得结果时它显示错误为 Cannot implicitly conve
我有一个函数 func login (parameters: [(String, Any)], completion: @escaping (Bool) -> Vo
我正在处理最近从 X/Motif 转移到 Qt 的 C++ 代码库。我正在尝试编写一个 Perl 脚本,它将用 bool 替换所有出现的 Boolean(来自 X)。该脚本只是做了一个简单的替换。 s
嗨,我正尝试创建一个Visiblity小部件,如果用户在Firebase数据库阵列上,该小部件将显示。看起来像这样(成员数组): 如您所见,我创建了一个StreamBuilder,如果当前用户的用户名
我创建了如下的rest api方法, Future activateAccount(int id, int code) async{ final body = {"code": '$c
在我的Flutter应用中,我有一个返回Future的函数,但我想将结果作为Stream。这是函数: Future isGpsOn() async { if (await Geolocat
我可以看到 BOOLEAN 覆盖了 __visit_name__ class BOOLEAN(Boolean): __visit_name__ = 'BOOLEAN' 控制调度员选择的访问者方
考虑以下代码: bool x; bool? y = null; x = y?? true; 将 bool? 分配给 bool 是一个编译时错误,但上面的代码在编译和运行时都成功了。为什么?尽管第三条语
我正在重写一些 Javascript 代码以在 Excel VBA 中工作。由于在这个网站上搜索,我已经设法翻译了几乎所有的 Javascript 代码!但是,有些代码我无法准确理解它在做什么。这是一
我想拍一张bool来自Vec并在 if 语句中进行比较。如何解决以下错误? | 7 | if cell { | ^^^^ expected
我在我的应用程序崩溃跟踪工具中发现了一些崩溃。基本上我有一个 tabBarController,其中一个选项卡有一个嵌入式 UIWebView,另一个选项卡有一个带有 UITableView 的 Co
我是一名优秀的程序员,十分优秀!