【发布时间】:2022-01-16 14:59:49
【问题描述】:
c++ 代码:
char buffer[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 };
char* data = buffer + 4;
data = (data - buffer + 3) / 4 * 4 + buffer;
int result = data[0];
我把它转换成 vb.net
Dim buffer() As Byte = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
Dim data() As Byte = buffer.Skip(4).ToArray()
Dim len = (buffer.Length - data.Length + 3) \ 4 * 4
data = buffer.Skip(len).ToArray
Dim result As Integer = data(0)
计算结果不一致。 在 c++ 结果是 5,vb.net 是 8。我怎样才能正确转换它?
【问题讨论】:
-
抛开讨厌的指针转换,一点代数告诉你
(data - buffer + 3) / 4 * 4 + buffer和1 + buffer是一样的,所以最后的result = buffer[1] -
data - buffer甚至与buffer.Length - data.Length不一样。data - buffer正在做指针运算,这在 VB 中是做不到的。该操作也不是很有趣,除非有一些干预代码可能会以不同的方式设置数据——您正在计算一个新的缓冲区偏移量,但可以完全在编译时计算。 -
代码的最终结果是
int result = buffer[7]。
标签: c++ arrays .net vb.net data-conversion