问题标签 [bitconverter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3062 浏览

c# - C#将一个补码位转换为一个二进制补码长?

在 C# 中,如何将 64 位补码数(表示为 long 或 ulong)转换为有符号的二进制补码 long?

作为参考,我正在尝试使用BitConverter.DoubleToInt64Bits().

0 投票
8 回答
23834 浏览

c# - C# 泛型:将泛型类型转换为值类型

我有一个通用类,它保存指定类型 T 的值。该值可以是 int、uint、double 或 float。现在我想获取值的字节以将其编码为特定的协议。因此我想使用方法 BitConverter.GetBytes() 但不幸的是 Bitconverter 不支持泛型类型或未定义的对象。这就是为什么我要转换值并调用 GetBytes() 的特定重载。我的问题:如何将通用值转换为 int、double 或 float?这不起作用:

是否有可能转换一个通用值?还是有另一种获取字节的方法?

0 投票
1 回答
400 浏览

c# - byte[8] 到 bits[64] 解析

我正在使用 c# 读取二进制文件。文件类型的规范说有 6 个东西打包成一个字节 [8]。但是,它说第一个变量是 0-19 位。第二个变量 20-39,第三个 40-59,第四个 60-62 和 63 位是布尔值。如何将这些位转换为有意义的数据?除了最后一位之外,所有这些变量都是 uint。

0 投票
2 回答
9090 浏览

c# - C# Byte[] 到长反转不起作用

为什么这个程序不起作用?我将一个字节数组转换为长数组。然后从 long 我转换回字节数组。生成的字节数组与原始数组不同。

0 投票
0 回答
651 浏览

vb.net - VB.net TCP 流式传输字节,算术运算导致溢出

我已经为此工作了几天,我只是在旋转我的轮子。这是一段 vb.net 代码,用于连接到 mikrotik 路由器的 api。它是在他们的 wiki 上提供的,但是会弹出一个错误,我很难找到答案。

大多数情况下,当我运行它时,一切正常,但如果响应太长,它就会出错,我认为这至少是导致它的原因。如果代码到达

我得到“算术运算导致溢出”

我知道这一切是如何运作的,但我只是不明白这里发生了什么。tcpStream.ReadByte() 返回 143

tmp(3) 返回 128

BitConverter.ToInt32(New Byte() {tcpStream.ReadByte(), tmp(3), 0, 0}, 0) ^ &H8000 返回“无限”,我认为这是问题所在。

如果您对其使用的完整代码感兴趣,可以在这里找到: http ://wiki.mikrotik.com/wiki/API_in_VB_dot_NET

如果没有人能告诉我出了什么问题,我真的很想知道这段代码在做什么......希望他们能评论他们的代码 =P

非常感谢大家

0 投票
2 回答
2741 浏览

c# - c# bitconverter.ToString 转换为十六进制字符串

BitConverter.ToString(bytes)用于将字符串转换为十六进制字符串,然后将其进一步转换为整数或浮点数。

但是输入流由 0 组成,表明字节值为 0。所以假设我有一个整数,它由从位置 x 开始的 2 个字节的输入表示,第一个由EEwhile 2nd byte is组成00。现在,当我使用时,BitConverter.ToString(bytes, x, 2).Replace ("-","")我得到的输出是EE00其整数值,60928但在这种情况下,输出应该是238仅将第一个字节转换EE为整数。

但在其他一些情况下,这 2 个字节可能是EE01其整数值60929,在这种情况下是正确的。

有什么建议可以解决我的问题吗?

由于有些人说这个问题令人困惑,我将重申我的问题,我有很长的十六进制字符串作为输入。在十六进制字符串中

1) 前 12 个字节代表字符串。2)接下来的 11 个字节也代表一些其他的字符串。3) 接下来的 1 个字节代表整数。4) 接下来的 3 个字节代表整数。5) 接下来的 4 个字节代表整数。6) 接下来的 4 个字节代表浮点数。7) 接下来的 7 个字节代表字符串。8) 接下来的 5 个字节代表整数。

因此,对于第 4 种情况,如果字节是 ee 00 00,那么我应该忽略 0 并将 ee 转换为整数。但如果它 ee 00 ee 那么我应该将 ee00ee 转换为整数。同样,每次我都会遵循与上述相同的模式。

0 投票
1 回答
82 浏览

hash - 有没有比 BitConverter.IsLittleEndian 更好的方法来检测 .NET 中的字节顺序?

如果 .NET 框架仅提供来自 BitConverter 类的函数/方法,该类仅以正确请求的字节序显式返回字节数组,那就太好了。

我已经在其他代码中完成了一些类似的功能,但是有没有更短更直接的方法?(效率是关键,因为这个概念在各种加密和密码派生上下文中使用 TON,包括 PBKDF2、Skein、HMAC、BLAKE2、AES 等)

我也看到其他人在这个问题上苦苦挣扎,我还没有看到一个好的答案:( 如何处理'Endianness'

0 投票
1 回答
160 浏览

c# - C# 中围绕 BitConverter.Int64BitsToDouble 的安全性和稳定性问题

我正在编写一个自定义反序列化系统,用于通过网络对数据进行打包,并通过以下方式对双打进行序列化:

EncodeInteger函数只是将整数转换为标记字符串,以便反序列化代码知道它具有正确的数据类型。

另一方面,我反序列化如下:

同样,DecodeInteger只需删除标签并验证该值是否在 long 范围内,然后强制转换为 long。这是安全的,因为如果出现任何问题,它只会抛出异常。

我担心的原因是,在进入参考源之后,我看到了这种直接的不安全演员表:

我预见的问题是 long 的可以任意修改,因为它是通过网络传输的。我并不担心被任意修改的值,而是如果发送无效的底层double表示,CLR 可能会遇到问题。

我不确定是否有任何潜在的long映射到有效的double,但如果有,我可能会看到什么?CLR 会崩溃,导致拒绝服务吗?或者是否有可以捕获的异常?

0 投票
2 回答
744 浏览

c# - 将 byte[] 转换为数组问题

请检查此代码

这会产生一个奇怪的结果。b 将是 { 0xBF, 0x04, 0xCE, 0xFF }

我猜这是因为 f 的值是 NaN。我问这个问题的原因是因为我使用 Marsal 将字节流转换为包含浮点数的结构,我交换字节序

问题是当我到达现场时已经搞砸了(就像上面的例子)

有任何想法吗?

谢谢!

0 投票
5 回答
2652 浏览

c# - C#,BitConverter.ToUInt32,不正确的值

我尝试将 IP 地址转换为长值:

Ret1 返回3232235776(正确的值)

Ret2 返回108736(?)

为什么会有这种差异?