SOGO論壇
  登入   註冊   找回密碼
查看: 901|回覆: 3
列印 上一主題 下一主題

[問題求助] 如何在VB寫一個陣列轉換副程式 [複製連結]

Rank: 5Rank: 5

狀態︰ 離線
跳轉到指定樓層
1
發表於 2011-11-24 06:03:00 |只看該作者 |倒序瀏覽 | x 1

dim ds(8),dd(8) as byte   ' ds 資料來源 dd資料目標陣列

如何寫一個 VB 或 VC 的副程式

將ds(7) .. ds(0)八個 byte 所有的 bit0 放到 dd(0)
將ds(7) .. ds(0)八個 byte 所有的 bit1 放到 dd(1)
...
將ds(7) .. ds(0)八個 byte 所有的 bit7 放到 dd(7)

例如 ds(0)=1,ds(1)=2,ds(2)=3,ds(3)=4,ds(4)=16,ds(5)=32,ds(6)=192,ds(7)=128

ds(7)=128___1 0 0 0 0 0 0 0
ds(6)=192___1 1 0 0 0 0 0 0
ds(5)=32____0 0 1 0 0 0 0 0
ds(4)=16____0 0 0 1 0 0 0 0
ds(3)=4_____0 0 0 0 0 1 0 0
ds(2)=3_____0 0 0 0 0 0 1 1
ds(1)=2_____0 0 0 0 0 0 1 0
ds(0)=1_____0 0 0 0 0 0 0 1

則傳回得結果為

dd(0)=5,dd(1)=6,dd(2)=8,dd(3)=0,dd(4)=16,dd(5)=32,dd(6)=64,dd(7)=192

喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

Rank: 5Rank: 5

數位硬體勳章

狀態︰ 離線
2
發表於 2011-11-24 11:28:20 |只看該作者
本帖最後由 Jackchen00 於 2011-11-24 16:39 編輯

我用C的方式寫給你

unsigned char a = 0x01,b,i,j;

for (i = 0 , i < 8 ; i++)
{
   dd[ i] = 0;
   b = 0x01;
   for (j = 0 , j < 8 , j++)
  {
     dd[ i] |= (ds[j] & a) == 0 ? 0 : b;
//或是也可以寫成 if ((ds[j] & a) != 0) dd[ i] = dd[ i] | b;
     b <<= 1;
  }
  a <<= 1;
}


這也許不是最好的方法
但敝人不才只能想出這樣的方法
希望對你有幫助
已有 1 人評分威望 收起 理由
紅塵孤鳥 + 2 感謝您熱心幫助會員解決問題,論壇需要您的.

總評分: 威望 + 2   查看全部評分

Rank: 5Rank: 5

數位軟體勳章

狀態︰ 離線
3
發表於 2011-11-24 17:48:57 |只看該作者
本帖最後由 alphi 於 2011-11-24 17:58 編輯

另一種寫法供您參考
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main(int argc,char *argv[])
  4. {
  5.         unsigned char dd[8]={0};
  6.         unsigned char ds[8]={1,2,3,4,16,32,192,128};
  7.         unsigned char i,j;
  8.        

  9.         for(i=0;i<8;i++)
  10.         {
  11.                
  12.                 for(j=0;j<8;j++)
  13.                 {
  14.                         if(ds[i] & (1<<j))
  15.                                 dd[7-j]|=(1<<(i));
  16.                        
  17.                 }
  18.                 //printf("\r\n");
  19.         }
  20.         for(i=0;i<8;i++)
  21.         {
  22.                 printf("dd[%d]=%d\r\n",i,dd[i]);
  23.         }
  24.     return 0;
  25. }
複製代碼
已有 1 人評分威望 收起 理由
又靜 + 2 感謝您熱心幫助會員解決問題,論壇需要您的.

總評分: 威望 + 2   查看全部評分

失敗只有一種:那就是半途而廢

Rank: 5Rank: 5

狀態︰ 離線
4
發表於 2011-11-24 19:19:07 |只看該作者
感謝2F,3F大師用C幫我解題,用 left bit shift 及 and 運算來解,太棒了!
敝人今天用VB 算術運算的方式解,方法很笨,但也可以達到需求

Dim dd(8) As Byte
Dim ds As Variant

Private Sub Form_Load()
   ds = Array(1, 2, 3, 4, 16, 32, 192, 128)
   ds(0) = 1
   DeCoder
   Text1.Text = dd(0) & "  " & dd(1) & "  " & dd(2) & "  " & dd(3) & "  " _
                & dd(4) & "  " & dd(5) & "  " & dd(6) & "  " & dd(7)
End Sub


Private Sub DeCoder()
    Dim i, j As Integer
    For i = 0 To 7
        dd(i) = 0
        For j = 0 To 7
            dd(i) = dd(i) + ((ds(j) \ 2 ^ i) Mod 2) * 2 ^ j
        Next j
    Next i
End Sub

執行結果

點評

alphi  靠自己能力寫出來的程式,想必對自我有所提升以及有成就感吧 一起努力嚕  發表於 2011-11-25 21:07:48
已有 1 人評分威望 收起 理由
又靜 + 1 您的真誠回覆內容精闢,堪為表率,值得鼓勵.

總評分: 威望 + 1   查看全部評分

請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-6-5 08:14

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部