在 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];
我正在尝试在 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];