[問題] 自訂數據長度

看板C_Sharp (C#)作者 (別理我)時間4年前 (2020/03/03 15:03), 4年前編輯推噓6(6014)
留言20則, 7人參與, 4年前最新討論串1/1
想請問 C# 要如何達到自訂數據長度 主要是用來做bit位移 內建最多就long 64bit 需要資料長度120bit 感覺struct或是用 array 兜出來 但抓不到想法要如何兜 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.217.109.68 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1583219004.A.FC5.html

03/03 15:19, 4年前 , 1F
BitArray不知道符不符合你的使用情境?
03/03 15:19, 1F
我看看是否 bitArray 否可行 其實主要是要將 RGB 24bit 轉成 RGB 30bit 例如 RGB 0xFF 0xFF 0xFF (11111111 11111111 11111111) 轉成 RGB 0011111111 0011111111 0011111111 再排成 byte (缺失高位元先補零) RGB 00111111 11001111 11110011 ..... 兩者最小公倍數120bit, 所以才想說能否有120bit, 又支援 << , & , | 運算等等 想到最笨的做法就是 byte array 全部轉成 120 長度字串, 再取其中8個字串轉成byte 只是想說有沒有跟優雅的寫法 ※ 編輯: abc95007 (180.217.109.68 臺灣), 03/03/2020 16:09:15

03/03 20:20, 4年前 , 2F
03/03 20:20, 2F

03/03 20:45, 4年前 , 3F
unsafe (誤)
03/03 20:45, 3F
感謝 BigInteger 可行! ※ 編輯: abc95007 (180.217.109.68 臺灣), 03/04/2020 11:24:10

03/04 14:15, 4年前 , 4F
你這需求其實蠻稀有的,圖像處理通常直升16bits,32bits甚
03/04 14:15, 4F

03/04 14:15, 4年前 , 5F
至double,處理完後再依輸出10bits做round/truncate,甚至
03/04 14:15, 5F

03/04 14:15, 4年前 , 6F
dithering
03/04 14:15, 6F
因為最後要是產生 bin 檔丟入IC, IC 再去組成10bit 24bit 與 30bit 最小公倍數又可整除 byte 就是120bit大小 ※ 編輯: abc95007 (122.116.139.44 臺灣), 03/05/2020 00:38:52

03/05 10:06, 4年前 , 7F
不懂為什麼這樣要120bit,只是24轉32不是嗎?
03/05 10:06, 7F

03/05 10:07, 4年前 , 8F
30,感覺32bits夠用
03/05 10:07, 8F

03/05 14:03, 4年前 , 9F
他是要做solid而不是常用的每一點3*10bit int32
03/05 14:03, 9F

03/05 14:04, 4年前 , 10F
int32裡面多的2bits還要給下一點用
03/05 14:04, 10F

03/05 14:09, 4年前 , 11F
純資料處理我是會用bytes陣列和unsafe啦,用bigint還得遵
03/05 14:09, 11F

03/05 14:09, 4年前 , 12F
守它的規則(little endian,正負號等)
03/05 14:09, 12F

03/06 14:20, 4年前 , 13F
我的意思就是其實也可自己取byte[n] ~ byte[n+3]丟進int32
03/06 14:20, 13F

03/06 14:21, 4年前 , 14F
轉完後再把int32拆開丟進byte[m](x) ~ byte[m+3或4](y)
03/06 14:21, 14F

03/06 14:22, 4年前 , 15F
只要記好offset就好,不一定要到120bit為單位做吧
03/06 14:22, 15F

03/06 14:57, 4年前 , 16F
是阿,如果做成資料流,以色素為單位,一個int16做buffer
03/06 14:57, 16F

03/06 14:57, 4年前 , 17F
就可以處理了。但也能理解原po想用4個像素一起處理,輸出4
03/06 14:57, 17F

03/06 14:57, 4年前 , 18F
個30bits像素為一組,因為剛好是15bytes。
03/06 14:57, 18F
是沒想到用 int 當buffer, 當時只是想到有些byte可能會被切一半,或是被亂切 覺得麻煩, 只想說一次可以處理一組完整的單位, 有問題也比較好 debug XD ※ 編輯: abc95007 (122.116.139.44 臺灣), 03/07/2020 00:08:18

03/07 02:30, 4年前 , 19F
好像很有趣
03/07 02:30, 19F

05/10 00:35, 4年前 , 20F
我會在C用bit field,x86電腦pg最小單位好像都byte
05/10 00:35, 20F
文章代碼(AID): #1UNW4y_5 (C_Sharp)
文章代碼(AID): #1UNW4y_5 (C_Sharp)