问题标签 [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.
c# - C# BitConverter 错误
当我尝试启动我的 c# 程序时出现错误(请不要我不是一个很好的编程,所以如果你能用非常简单的术语写下答案,那将不胜感激)
这是出现错误的图片 - http://prntscr.com/7s2uq9
错误显示“名称空间 'BitConverter' 中不存在类型或名称空间名称 'GetBytes'(您是否缺少程序集引用?)”
我已经尝试过这些
——重写代码
——重写顶部的命名空间引用(http://prntscr.com/7s2vf6)
我的“使用参考的东西是” -
c# - 如何在Objective-c中将short转换为字节数组?
在 C# 中,short 可以像这样转换为 byteArray
我想在 C 或 Objective-C 中实现它
c# - 通过将数据类型从字节快速转换为其他类型,在 C# 中每秒处理 1000 个参数
在过去的 2 年里,我一直在问这个问题,并且仍在寻找一种好的方法来做到这一点。我正在做的事情如下:
我有一个过去 3 年开发的 WPF/C# 应用程序。它通过 UDP 端口获取实时字节流。每个记录集为 1000 字节。我每秒获得 100 个这些字节记录。我正在读取数据并对其进行处理,以便以各种格式显示。这些逻辑记录是子交换的。
前 300 个字节相同,每个逻辑记录包含 Byte、Int16、UInt16、Int32 和 UInt32 值的混合。这些值中的大约 70% 最终乘以最低有效位以创建 Double。这些参数始终相同。第二个 300 字节是 Byte、Int16、UIn32、Int32 和 UInt32 值的另一种混合。再次将这些值中的大约 70% 乘以 LSB 以创建 Double。这些参数又总是相同的。最后一段为 400 字节并进行了子交换。这意味着记录的最后一部分包含 20 种不同逻辑记录格式中的 1 种。我称它们为 Type01...Type20 数据。有一个标识符字节告诉我它是哪一个。这些再次包含需要转换的 Byte、Int、UInt 数据值。
我目前正在使用数百个函数调用来处理这些数据。每个函数调用都将 1000 字节数组作为参数,一个偏移量(索引)到参数开始的字节数组中。然后它使用 BitConverter.ToXXX 调用将字节转换为正确的数据类型,然后在必要时乘以 LSB 以创建最终数据值并将其返回。
我正在尝试简化此处理,因为数据流会根据源而变化。例如,其中一个新数据源(提要)在前 300 个字节中更改了大约 20 个参数,在第二个 300 个字节中更改了大约 24 个参数,在最后一个子交换的 400 字节记录中更改了几个参数。
我想构建一个数据字典,其中字典包含逻辑记录号(数据类型)、记录偏移量、数据 LSB、要转换为的数据类型(Int16、UInt32 等),最后输出类型( Int32、Double 等)。也许还包括要使用的 BitConverter 函数和“动态转换”?
这似乎是使用模板类和可能的委托的练习,但我不知道如何做到这一点。我将不胜感激一些代码,例如示例。
数据也被记录下来,因此回放可以以 2x、4x、8x、16x 的速度运行。现在,在有人评论如何以这些速度查看数千个参数之前,这并不像人们想象的那么难。某些类型的数据,例如绿色背景为好,红色为坏;或随着时间的推移绘制地图位置 (LAT/LON) 非常适合快速回放以查找有趣的事件。所以这是可能的。
提前感谢您的帮助。
我不确定其他人是否知道我正在尝试做什么,所以我想我会发布一小段源代码,看看是否有人可以改进它。
就像我上面说的,数据以字节流的形式出现。在字节数组中读取它后,它将如下所示:
前 2 个字节是一个等于 1 的 ushort。这是此特定记录的记录类型。此数字的范围可以从 1 到 20。
接下来的 4 个字节是一个 uint,等于 453,455。该值是十分之一秒的数量。本例中的值为 12:35:45.5。为此,我将对以下子例程进行以下调用:
下一个数据字段是软件版本,在本例中为 23
下一个数据字段是另一个 UInt16 的系统状态字。
如果 16 位中的任何一个设置为逻辑 1,则内置测试状态位将传递给其他例程。
我实际上有超过一千个单独的子程序来处理存储在字节数组中的数据。字节数组始终为 1000 字节的固定长度。前 6 个字节总是相同的,标识符和时间。之后,每一帧的参数都不同。
我对软件进行了一些重大修改,这些修改将为下一个软件版本重新定义许多参数。我仍然必须支持旧的软件版本,所以软件变得更加复杂。我的目标是找到一种使用字典查找来处理数据的方法。这样我就可以创建字典并阅读字典以了解如何处理数据。也许使用循环将数据加载到集合中,然后将其绑定到显示字段。
像这样的东西:
我的底线问题是让参数定义强制转换或选择正确的函数。我找不到将“字典”链接到实际数据输出的方法
谢谢你的帮助
c# - 是否有内置函数来扩展 byte[] 在开头留下零?
我有这个代码
如果宽度为 12,则返回一个字节而不是 4,是否有一个内置函数来调整数组的大小,在开头留下 0 以输出 [0, 0, 0, 12] 而不是 [12]。
c# - GetBytes 函数是如何工作的?
我编写了自己的类,它将 C# 标准原语转换为字节数组。
后来,我看了一下BitConverter
类源,看看专业人士是如何做到的。
我的代码示例:
BitConverter 类代码:
为什么它们的功能被标记为不安全并使用固定运算符?
即使它们使用不安全,这些功能是否容易出错?我应该放弃我的并使用他们的实现吗?哪个更有效率?
delphi - 相当于delphi中的c#bitconverter
Delphi 中是否有等效的 bitconverter.getbytes?
https://msdn.microsoft.com/en-us/library/fk3sts66(v=vs.110).aspx
c# - 字节数组到 int C#
我正在尝试将字节数组转换为 int 值,但是出现异常:
“目标数组不够长,无法复制集合中的所有项目。请检查数组索引和长度。”
例外是在线:
byte _length 包含值(0x00,0x09);
这是我的代码:
c# - 将 textbox.text 属性中的十六进制字符串作为 C# 中的十六进制传递给 BitConverter.GetBytes
例如,我正在从传感器读取值并以字符串格式“417D”和“8380”接收两个 16 位十六进制值。
我似乎无法在 C# 中找到一种方法来解析字符串以将它们拆分为保留十六进制数的字节数组( 41,7D,83,80 )。
然后,我使用以下内容将 IEEE754 数字转换为小数,以获得正确的传感器读数值。
txtFloatValue.Text = BitConverter.ToSingle(hex, 0).ToString();
下面的代码有效,但我需要将值作为十六进制数组传递,而不是 0x417D8380。
任何建议将不胜感激。我可能以错误的方式处理这个问题,但 IEEE754 转换效果很好。
vb.net - BitArray 字节序是否始终与 BitConverter 字节序匹配?
如果我的类使用 BitArray 和 BitConverter 类,两者的字节序是否总是匹配?
BitConverter 构造函数的文档明确提到它取决于它所使用的体系结构(几乎总是小端),但是BitArray(Byte) 构造函数文档只是说:
数组中的第一个字节表示位 0 到 7,第二个字节表示位 8 到 15,依此类推
但这并没有指定字节顺序方案是否适用于例如使用BitArray.CopyTo()。
编辑
这可能很重要的一个例子是:
c# - c# 改进二进制序列化
我目前正在开发一个基于其他代码生成代码的项目。本质上将编程语言本身用作 DSL。
生成器目标之一是二进制 DataContract 序列化程序和为以下类生成的 ToBytes
变成这样:
现在即使很难,这真的很快,我正在寻找一种方法来加快Buffer.BlockCopy(BitConverter.GetBytes
. byte[]
为每次转换创建一个新的小块然后在我已经拥有byte[]
和位置时复制它似乎仍然是浪费资源。
任何想法如何最好地改进代码?
更新:基于@adrianm 评论,我将用 for 循环替换 foreach 数组并在 if 语句中包装可空类型。不需要像在另一个线程中那样使用结构。我宁愿使用类和 [DataContract] 属性。另外为了符合 Linux 规范,我不能使用 WinApi。
更新 2:添加了生成的代码的其余部分。感谢评论未来的版本将包括