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/m.aspx?n=bbs/C_Sharp/M.1658844255.A.AD0.html --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.110.213.245 (臺灣)
※ 文章網址: https://webptt.com/m.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燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP