gpt4 book ai didi

c# - 从 C# 流中读取无符号 24 位整数

转载 作者:行者123 更新时间:2023-11-30 13:34:16 25 4
gpt4 key购买 nike

使用 BinaryReader 从 C# 流中读取无符号 24 位整数的最佳方法是什么?

到目前为止,我使用的是这样的:

private long ReadUInt24(this BinaryReader reader)
{
try
{
return Math.Abs((reader.ReadByte() & 0xFF) * 256 * 256 + (reader.ReadByte() & 0xFF) * 256 + (reader.ReadByte() & 0xFF));
}
catch
{
return 0;
}
}

有没有更好的方法来做到这一点?

最佳答案

你的代码有些问题

  • 你的问题和签名说无符号但你从函数返回一个带符号的值
  • .Net 中的
  • Byte 是无符号的,但您正在使用带符号的值进行算术运算,从而强制稍后使用 Math.Abs​​。使用所有无符号计算来避免这种情况。
  • 恕我直言,使用移位运算符而不是乘法来移位更简洁。
  • 默默地捕获异常在这里可能是错误的想法。

我觉得这样写更可读

private static uint ReadUInt24(this BinaryReader reader) {
try {
var b1 = reader.ReadByte();
var b2 = reader.ReadByte();
var b3 = reader.ReadByte();
return
(((uint)b1) << 16) |
(((uint)b2) << 8) |
((uint)b3);
}
catch {
return 0u;
}
}

关于c# - 从 C# 流中读取无符号 24 位整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3559183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com