C_Sharp 板


LINE

※ 引述《popo14777 (草草)》之铭言: : 标题: Re: [问题] short整数资料overflow解决方式 : 时间: Tue Jul 26 22:04:13 2022 : : ※ 引述《sec2 (sec2)》之铭言: : : short a = -1; : : var b = BitConverter.GetBytes(a); : : var c = BitConverter.ToUInt16(b); : : c 应该就是你要的了 (=65535) : : 分享找到的答案: : PLC资料暂存器有高低位,如果存到D300,D300为低位,D301为高位 : 例1:D300读出-32767(16bit),D301读出0(16bit),计算後为32769(32bit) : 例2:D300读出2(16bit),D301读出1(16bit),计算後为65538(32bit) : 例3:D300读出3392(16bit),D301读出3(16bit),计算後为200000(32bit) : 例4:D300读出-7328(16bit),D301读出22(16bit),计算後为1500000(32bit) : 以上实验皆有符合我最终需求,程式的部分还不太能理解,程式码如下: : 其实就是计数器用的暂存器大小有 4-byte 但因为某些缘故其位址被切成 D300 和 D301 各 2-byte 没办法一次读进来 所以要把分两次读进来的 D300 和 D301 还原成 int 然後下面的 Function 其实可以简化成 return ((SourceA & 0xffff) << 16) | (SourceB & 0xffff); 就结束了 基本概念就是 SourceA * 65536 + SourceB 只是因为 API 回传 short (但内容应该当成 ushort) 所以必须使用位元运算处理成更大的型别再加总 上面的写法就是纯粹使用位元移位完成 如果使用我前一篇的写法将得到的 a 和 b 都先 cast 成 int 的话 之後 a * 65536 + b 也可以得到一样的答案 如果对 bitwise operation 不熟悉的话建议可以阅读 https://docs.microsoft.com/zh-tw/dotnet/csharp/language-reference/operators/bitwise-and-shift-operators https://bit.ly/3zhHl9M 位元与移位运算子 (C# 参考) ==== 补充 刚刚与朋友讨论感觉原 PO 可能连整数型别的数值范围都不是很能掌握 建议也阅读 https://docs.microsoft.com/zh-tw/dotnet/csharp/language-reference/builtin-types/integral-numeric-types https://bit.ly/3vinS7C C# 参考 (整数型别) : private static int toInt32(short SourceA, short SourceB) : { : int DataInt32 = 0; : //short SourceA=,SourceB;//A代表低位,B代表高位 : DataInt32 |= (SourceB & 0x0000ffff); //不太能理解 : DataInt32 = (DataInt32 << 16) | (SourceA & 0x0000ffff); //不太能理解 : return DataInt32; : } : : private void button1_Click(object sender, EventArgs e) : { : timer1.Interval = 1000; : timer1.Enabled = true; : timer1.Start(); : } : : private void timer1_Tick(object sender, EventArgs e) : { : textPLC.ReadDeviceRandom2("D300", 1, out Readwordbcd); : short a = Readwordbcd; : textPLC.ReadDeviceRandom2("D301", 1, out Readwordbcd); : short b = Readwordbcd; : int D300 = toInt32(a, b); : textBox1.Text = D300.ToString(); : } : : 谢谢 : : -- :



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.161.143.100 (台湾)
: ※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1658844255.A.AD0.html --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.110.213.245 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1658905223.A.10A.html ※ 编辑: sec2 (140.110.213.245 台湾), 07/27/2022 15:14:01
1F:推 popo14777: 原来是这样!谢谢 08/10 11:27







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP