在 c# 中,这个 swift Uint8 转换的等价物是什么?

What is the equivalent of this swift Uint8 conversion in c#?

我正在尝试在 C# 中转换此 swift 片段,但我有点困惑。基本上,我需要这个函数来从信标获取测距数据,如下所示:https://github.com/google/eddystone/tree/master/eddystone-uid

func getTxPower( frameData: NSData) -> Int
{
let count = frameData.length
var frameBytes = [UInt8](repeating: 0, count: count)
frameData.getBytes(&frameBytes, length: count)
let txPower = Int(Int8(bitPattern:frameBytes[1]))
return txPower
}

我得到一个 NSData 并将其转换为 UInt8 数组。我只需要获取第二个位置的元素并将其转换为带符号的 int。

这是我试过的 C# 代码:

int getTxPower(NSData frameData)
{
var count = frameData.Length;

byte[] frameBytes = new byte[Convert.ToInt32(count)];

Marshal.Copy(frameData.Bytes, frameBytes,0,Convert.ToInt32(count));

int txPower = frameBytes[1];

return txPower;
}

我也希望得到负值,因为,如 link 中所写,TxPower 的值范围为 -100 dBm 至 +20 dBm,分辨率为 1 dBm。

感谢那些愿意帮助我的人。

大概代替:

int txPower = frameBytes[1];

(只是将无符号字节扩展为 32 位)

int txPower = (int)((sbyte)frameBytes[1]);

(将无符号字节重新解释为有符号字节,然后扩展为 32 位)

注意(int)可以隐式完成,如果更清楚:

int txPower = (sbyte)frameBytes[1];