二元加运算符对 C 中的 int Array 做了啥

Posted

技术标签:

【中文标题】二元加运算符对 C 中的 int Array 做了啥【英文标题】:What does binary plus operator do to int Array in C二元加运算符对 C 中的 int Array 做了什么 【发布时间】:2022-01-08 20:28:13 【问题描述】:

我正在将一个不起眼的库从 C 移植到 dart。

一个属性是在这样的结构上定义的 unsigned char payload[256];

我将其解释为一个字符数组。所以我把它转换成 List<int> payload;

后来在原库中有这段代码

parser->handleDataValue( extendedCodeLevel, code, numBytes, parser->payload+i, parser->customData );

其中 'i' 是循环的索引

我把它翻译成

parser.handleDataValue(extendedCodeLevel, code, numBytes, parser.payload + i, parser.customData);`

现在我正在处理错误 The argument type 'int' can't be assigned to the parameter type 'List<int>'.

我了解问题的 dart 方面,但我不明白原始 C 语言编写其 dart 等效项的含义。

【问题讨论】:

它执行指针运算。用 C 语言编写它的另一种方法是 &(parser->payload[i]) 对于任何数组或指针p 和索引i,表达式p[i] 完全等于*(p + i)。由此可以推断出p + i是一个指向索引i处元素的指针(即&p[i])。 @Someprogrammerdude 啊,这是否意味着它指向payload数组中的下一个元素? @xerooperator:不。将 1 点添加到下一个元素。将i 点添加到从起点位移i 元素的元素。 哦,我明白了,谢谢。 【参考方案1】:

我可能会将 C 中的 unsigned char payload[256]; 翻译成 Dart 中的 Uint8List payload;。这是未签名的“char”的实际列表。

然后可以通过以下方式模拟指针算法 Uint8List.sublistView(parser.payload, i),从ith值开始创建payload的数据视图,无需复制,就像C代码一样。

Q.v. Uint8List.sublistView.

【讨论】:

比你。这正是代码所做的。最终得到了一个黑客解决方案,但我会改变这个,因为它是最有效的。感觉

以上是关于二元加运算符对 C 中的 int Array 做了啥的主要内容,如果未能解决你的问题,请参考以下文章

二元运算符 % 不能应用于 UInt32 和 int 类型的操作数

NSError 代码检查:二元运算符“==”不能应用于两个 Int 操作数

JAVA元运算符,一元运算符,二元运算符,三元运算符

基本的一些代码规范

一元二元三元逻辑运算符

C语言中取地址跟C++中的引用是一个意思吗?