对10 bytes的数据的每一字节做累加,然后得到的2字节的结果存起来。代码应该注意什么?

问题描述

各位C#高人~小弟才接触C#几天。由于公司一前辈离职了,我么留在的没有什么人会c#所以特来请教。那前辈写的代码我基本能看懂,但是有一点今天改了一个下午没整对。其实应该很简单。假如就一段10字节的数据,data[10]=0x11223344556677889900。需要做的就是对每一字节做累加:for(inti=0;i<10;i++){byteresult[i]+=data[i];}

然后得出的结果应该为0x02DF对吧?但是定义的result[]的类型是byte。那么我用什么方法才能够算出的0x02DF放在某个类型的变量里面然后和原来的data[]连在一起形成0x1122334455667788990002DF?我能够想到的是定义一个ushort变量,然后把data每一位的累加放在这个ushort变量里面,然后再用结果和0xFF00还有0x00FF做与预算。得到的高位的那个右移8bit。然后把两得到的结果再存成byte格式的变量,让在data[]后面。但是写完编译的时候就报错,说&不能用做byte,int,char变量之间的运算。所以请各位大侠多多指教!

解决方案

解决方案二:
你这个是什么东西啊,看你想要做的是签名部分,那不应该是byte[]数组吗?为什么会有那么长的16进制整数……
解决方案三:
引用1楼starfd的回复:

你这个是什么东西啊,看你想要做的是签名部分,那不应该是byte[]数组吗?为什么会有那么长的16进制整数……

错了错了应该是byte[]data=newbyte[10]={0x11,0x22,0x33...0x99,0x00}
解决方案四:
指定长度或者签名什么的都是索引在最前面的几个byte或者最后面的几个byte,当然具体几个就在约定了重新生成一个数组,然后就是Array.Copy特定位置的事情了
解决方案五:
引用3楼starfd的回复:

指定长度或者签名什么的都是索引在最前面的几个byte或者最后面的几个byte,当然具体几个就在约定了重新生成一个数组,然后就是Array.Copy特定位置的事情了

我知道用C的写法,也就是unsignedshortSum;unsignedshorti;Sum=0;for(i=0;i<Len;i++){Sum+=(unsignedshort)(data[i]);}

不知道C#能有没有比较简单的写法。
解决方案六:
intsum=data.Sum()

解决方案七:
引用5楼starfd的回复:

intsum=data.Sum()

实践证明,我需要做的是重新整理数组成新的格式,也就是ushort。每个元素的高的byte右移8bit存成另外一个byte[]temp=newbyte[data.Length*2]的tamp[],低位的保持并存到temp[]里面,最后累加作为sum值。sum定义为ushort,所以sum仍然要做移位和类型强制转换到byte。谢啦~我好想现在都不知道自己在说什么……
解决方案八:
数字和数组的互转,你是要这个吧?
解决方案九:
你做的是2字节的sum校验,而不是单字节的所以应该定义个short型的变量来存放累加结果,而不是用byte来存放最后再用移位操作吧short分解成2个byte就行了如果移位不会,用short/256,short%256也可以简单的得到高字节和低字节
解决方案十:
说&不能用做byte,int,char变量之间的运算怎么还有char?真不知道你的代码到底是怎么写的,最好放出完整的代码来如果提示你&操作不能用于byte,你可以把byte强制转为int再做与运算但是其实你根本不需要做与运算,直接做个移位运算就行了shorts=12345;byteb1=(byte)s;//获取低8位,高8位舍弃byteb2=(byte)(s>>8);//获取高8位,就是将short右移8位,将高位挪到低位来
解决方案十一:
两字节应该用short或ushortushortsum=data.Sum();byte[]buffer=BitConverter.GetBytes(sum);byte[]result=data.Contact(buffer).ToArray();
解决方案十二:
需要注意的是BitConverter转成数组时的字节存放顺序(小端或大端),是否与你的需求一致,你也可以向LS那样,自己移位+按位与操作来分别取高位和低位字节

时间: 2024-10-01 00:33:42

对10 bytes的数据的每一字节做累加,然后得到的2字节的结果存起来。代码应该注意什么?的相关文章

oracle数据库中怎么一次性插入10万条数据

问题描述 oracle数据库中怎么一次性插入10万条数据 oracle数据库中怎么一次性插入10万条数据?急用!!!1 解决方案 最快的方法是用imp进行导入 或者用sql执行也可以(insert into )

分页-mysql某个字段排序后按这个字段分组取前10个的数据

问题描述 mysql某个字段排序后按这个字段分组取前10个的数据 需求是按某个字段分组,再按分组分页,取出每页分组里的所有数据. 例如表数据 Id 组名 1 A 2 A 3 B 4 A 5 B 6 C 7 F 8 C 9 D 10 E 11 F 每页取两组数据,第一页结果是 Id 组名 1 A 2 A 4 A 3 B 5 B 第二页结果是 Id 组名 6 C 8 C 9 D 第三页结果是 Id 组名 10 E 7 F 11 F 这有办法用一条sql查吗 解决方案 不知道你的分组的依据是什么,至于

mysql 插入10万条数据 优化效率

问题描述 mysql 插入10万条数据 优化效率 public int addTypes(List<taobaoBean> babyList) { String sql = "insert into type (typeid,url) values (?,?) "; Connection conn = dbhelper.getConnection(driver,url,username,upwd); int result = 0; PreparedStatement stm

每隔两分钟就显示数据库里的10条最新数据怎么做

问题描述 每隔两分钟就显示数据库里的10条最新数据怎么做 解决方案 解决方案二:那就每隔10分钟刷新一下页面了解决方案三:数据查询操作放到Timer控件的Tick事件里,每隔两分钟就显示数据库里的10条记录,查询语句里指明求最新追加的10条记录,如有自增的id则,selecttop10*fromtableorderbyiddesc解决方案四:selecttop10*fromtableorderbyiddesc访问数据库写对就OK了其他只要想办法实现定时刷新就可以刷新页面方法很多..整理了一下第一

怎样快速的向SQL-2000里插入10万条数据啊?

问题描述 本人刚参加了一个公司的笔试,有这样一道题,想到了一个笨方法,但速度比较慢,有没有比较快速的方法,向数据库里插入10万条数据?谢谢了... 解决方案 解决方案二:BULKINSERT解决方案三:能不能说的清楚点,还是不明白.解决方案四:在SQL联机帮助里找找看,网上搜索下也行的.解决方案五:有点难度哦

c# 4.0-Parallel.For并行录入10万条数据出错

问题描述 Parallel.For并行录入10万条数据出错 用了一个CodeTimer测试性能,在循环方法体的时候,老大说让用Parallel.For代替for循环. 结果瞬间快了100倍的测试速度,但是又出现一个问题了,数据录不进去了. 经常循环10万次才录入一条,断点调试后发现就第一条录进去了,后面的都是数据库连接池错误. 我想问下用并行之后,这种情况是正常的吗,如果不正常,有什么方法解决呢 代码中的Time()的三个参数,第一个是方法名(无视),第二个是循环次数,第三个是方法体,关于Tim

有哪位高人知道怎么将16进制表示的float64数据转换为10进制数据

问题描述 有哪位高人知道怎么将16进制表示的float64数据转换为10进制数据,我看到有人说"16进制:41F075D841873600转换后是:16.9013671875(十进制)"请问怎么转啊,帮我看看,以3fe36614aadabcc9为例,转出来是多少? 解决方案 解决方案二:41F075D841873600==4751427178548639232用计算器解决方案三:??16进制:41F075D841873600byte[]bs={0x00,0x36,0x87,0x41};

《数据科学:R语言实现》——3.10 重塑数据

3.10 重塑数据 重塑数据类似于创建列联表,它允许用户聚合特定值下的数据.reshape2程序包就是用来完成这个任务的.这里,我们会介绍如何使用reshape2程序包,借助函数dcast把长数据转换成宽数据.我们也会介绍如何使用函数melt把宽数据转换回长数据. 准备工作 按照3.8节"合并数据"教程,把employees和salaries融合为employees_salary. 实现步骤 执行下列步骤,重塑数据. 1.首先,我们可以使用函数dcast把长数据转换成宽数据: 2.我们

直扑云计算 苹果10亿美元投建数据中心

本文讲的是直扑云计算 苹果10亿美元投建数据中心,[IT168 专稿]据国外媒体最近披露的一组数字表明,苹果公司将在美国北卡罗来纳州建立一个规模在10亿美元左右的超级数据中心,而这个数据中心将主要用于苹果公司的网络服务支撑,为其未来的云计算计划打好基础.     这则消息是由分析师分析北卡罗来纳州立法部门的财务报告时发现的.据该报告透露,北卡罗来纳州将在未来十年内为一家不能透露姓名的企业免除将近4600万美元的税金.按照该州的免税条令,这笔免税额度意味着该公司将在之后的9年内在该州投资至少10亿