【问题标题】:Splitting a 200 bit hexadecimal bitmask [closed]拆分 200 位十六进制位掩码 [关闭]
【发布时间】:2015-03-04 13:59:41
【问题描述】:

我有一个 200 位的位掩码存储为十六进制值。 为了应用 & 位运算符,我必须首先将十六进制转换为整数,但 200 位对于 uint64 来说太大了,所以我的问题是:如何在不丢失数据的情况下将位掩码拆分为 4 个不同的十六进制值?

这样我也可以拆分我的 200 位数据,然后将每个数据块与相应的位掩码块进行比较,而不会改变结果。

【问题讨论】:

  • 存储的200位值的数据类型是什么?
  • 我不是指格式,我是指C#数据类型(C#没有“十六进制”数据类型)。
  • 什么是“十六进制”? byte[]?
  • 抱歉,我正在从文件中读取数据和位掩码,所以它在字符串中
  • 那么第一步是将输入字符串转换为整数数组(byte/short/int/long),然后您需要对数组中的所有条目执行按位与运算.

标签: c# hex bitmask


【解决方案1】:

您可以使用 System.Numerics 中的BigInteger(它是一个单独的程序集):

BigInteger bi = BigInteger.Parse("01ABC000000000000000000000000000000000", System.Globalization.NumberStyles.HexNumber);

非常重要:在十六进制数字前添加“0”! (因为BigInteger.Parse("F", NumberStyles.HexNumber) == -1,而BigInteger.Parse("0F", NumberStyles.HexNumber) == 15

BigInteger 实现“经典”逻辑运算符(&、|、^)

需要 .NET 4.0

【讨论】:

  • 工作就像一个魅力!谢谢
【解决方案2】:

实现这一点最有效的方法是编写一个类,该类可以存储和对 200 位数据进行二进制操作,将字符串作为输入等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多