二元加运算符对 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)
,从i
th值开始创建payload
的数据视图,无需复制,就像C代码一样。
Q.v. Uint8List.sublistView.
【讨论】:
比你。这正是代码所做的。最终得到了一个黑客解决方案,但我会改变这个,因为它是最有效的。感觉以上是关于二元加运算符对 C 中的 int Array 做了啥的主要内容,如果未能解决你的问题,请参考以下文章
二元运算符 % 不能应用于 UInt32 和 int 类型的操作数