热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

两个byte(高低位)组成一个int16

问题是这样的下位机有个值是-5345,大家知道5345用16进制表示是0xeb1f,所以下位机发送给我两个字节(byte)eb和1f但是我收到这两个字节怎么组合成-5345
问题是这样的 
下位机有个值是-5345,大家知道5345用16进制表示是  0xeb1f,所以下位机发送给我两个 字节(byte) eb和 1f
但是我收到这两个字节怎么组合成-5345


我现在用的方法是 eb左移8位(高位) 加上 1f(低位)
但是eb左移8位后就超过了 int16的最大值,造成了数据溢出的异常,求教一下大家,谢谢 

10 个解决方案

#1


unchecked
{
      //你的运算
}

#2


不懂上下位机,但我知道计算机里要规定是2字节,那么运算中超出的就要从高位舍去,开始新的一个轮回,像23点+1就成了0点了,舍掉24从0开始

#3


昨天刚做完。。。
byte a[2];  放你的2个数值,高位低位自己找好。
Convert.ToInt16((a[0].ToString("X2") + a[1].ToString("X2")), 16)

#4


引用 3 楼 cs1438250 的回复:
昨天刚做完。。。
byte a[2];  放你的2个数值,高位低位自己找好。
Convert.ToInt16((a[0].ToString("X2") + a[1].ToString("X2")), 16)


这个是可以的,我之前想到了,没用是因为怕转化成string会有问题,还有其他办法没?直接通过数值运算
先感谢下你,没其他回答分只能是你的了

#5




    class Program
    {
        static void Main(string[] args)
        {
            byte b1 = 0xeb;
            byte b2 = 0x1f;

            UInt16 val = Convert.ToUInt16((b1 << 8) + b2);
            Console.WriteLine((Int16)val);
            Console.WriteLine(val.ToString("X"));
            Console.ReadKey();
        }
    }

#6


引用 4 楼 lccleo 的回复:
Quote: 引用 3 楼 cs1438250 的回复:

昨天刚做完。。。
byte a[2];  放你的2个数值,高位低位自己找好。
Convert.ToInt16((a[0].ToString("X2") + a[1].ToString("X2")), 16)


这个是可以的,我之前想到了,没用是因为怕转化成string会有问题,还有其他办法没?直接通过数值运算
先感谢下你,没其他回答分只能是你的了


有符号数啊。2byte的 大于7fff,就是负数。。还得考虑正负转换。。c#给封装好了就用吧。。 modbus昨天我也刚写了个程序。
ToString("X2")  转化成字符串十六进制,不足两位,补齐两位。

#7


引用 4 楼 lccleo 的回复:
Quote: 引用 3 楼 cs1438250 的回复:

昨天刚做完。。。
byte a[2];  放你的2个数值,高位低位自己找好。
Convert.ToInt16((a[0].ToString("X2") + a[1].ToString("X2")), 16)


这个是可以的,我之前想到了,没用是因为怕转化成string会有问题,还有其他办法没?直接通过数值运算
先感谢下你,没其他回答分只能是你的了


怕转化成string有什么问题?

#8


BitConverter..::.ToInt16 方法 

#9


你的方式是对的,不过高低位弄错了。



     byte[] b = { 0x1f, 0xeb };


     short sxaa = (short)(b[0] | b[1] << 8);



      short  i = BitConverter.ToInt16(b, 0);

#10


            var b = new byte[] { 0xeb, 0x1f };
            Console.WriteLine(BitConverter.ToInt16(new byte[] { b[1], b[0] }, 0));
            Console.WriteLine(Convert.ToInt16((b[0].ToString("X2") + b[1].ToString("X2")), 16));
            Console.WriteLine((Int16)Convert.ToUInt16((b[0] << 8) + b[1]));
三种都可以

推荐阅读
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了在Java中gt、gtgt、gtgtgt和lt之间的区别。通过解释符号的含义和使用例子,帮助读者理解这些符号在二进制表示和移位操作中的作用。同时,文章还提到了负数的补码表示和移位操作的限制。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • Java值传递机制的说明及示例代码
    本文对Java值传递机制进行了详细说明,包括形参和实参的定义和传递方式,以及通过示例代码展示了交换值的方法。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
author-avatar
小鱼2502907687
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有