台灣最大程式設計社群網站
線上人數
2220
 
會員總數:245979
討論主題:189557
歡迎您免費加入會員
討論區列表 >> C# >> 會c的朋友請幫幫我,我已經想了好幾天了,謝謝!
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
會c的朋友請幫幫我,我已經想了好幾天了,謝謝!
價值 : 0 QP  點閱數:872 回應數:14
樓主

麥克利
門外漢
0 0
0 0
發送站內信

宣告一個 array:
unsigned char DataArray[256];
呼叫副程式 SetArray 來把值設定到 DataArray 裡頭。
int SetArray(int StartAddr, unsigned char *data,int no)
 {
 }

StartAddr 就是寫入的起始位置。也就是要從哪一個位址開始填資料進去。
data 為要寫入的 DATA 的所在位置。(這是一個 pointer)
no 為要填幾個(BYTES) DATA 進去。(限制最大為 16)


測試時你可以宣告一個ARRAY
char TestData[10]={1,2,3,4,5,6,7,8,9,0};
呼叫 SetArray(10,TestData,10);
之後把 DataArray[10],...DataArray[19] 印出來應該就是 1,2,3,...9,0


本篇文章發表於2003-05-14 16:23
1樓
回應

HaHa
檢舉此回應
int SetArray(int StartAddr, unsigned char *data,int no)
{
        int temp;
    for (temp = StartAddr;temp < StartAddr+ no; temp ++)
                DataArray[temp] = TestData[temp - StartAddr];
    return 0;
}
本篇文章回覆於2003-05-14 17:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

麥克利
檢舉此回應
haha,謝謝你!
不過我有另一問題,為何要如此寫,可不可以告訴我,或是哪裡找得到相關的資料,不好意思,麻煩你.
本篇文章回覆於2003-05-14 19:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

麥克利
檢舉此回應
可是我執行這支程式,出來的結果為TestData[0]=513.
是不是我呼叫錯誤阿.
本篇文章回覆於2003-05-14 19:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

世界和平
檢舉此回應
原題:
int SetArray(int StartAddr, unsigned char *data, int no)
{
}
建議函式原型改成如下:
int SetArray(int StartAddr, unsigned char *data, unsigned int no)
{
  assert(no >= 0); //若改函式原型成建議的,這行就可以不用檢查
  while(no) DataArray[StartAddr + no] = data[--no];
  return no;
}
本篇文章回覆於2003-05-14 21:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

世界和平
檢舉此回應
還要額外判斷StartAddr是不是小於256,
及data是不是「合法」的。
方法如下:
assert(StartAddr < 256);
assert(data && data[0]);
本篇文章回覆於2003-05-14 22:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

麥克利
檢舉此回應
如照上述,我該如何正確呼叫setarray這支副程式ㄋ,我自己的呼叫方法不正確,可否麻煩告知正確的呼叫方式,謝謝!
本篇文章回覆於2003-05-14 22:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

麥克利
檢舉此回應
我後來寫的,但是印不出結果
#include <stdio>
unsigned char DataArry[256];
char testdata[10]={1,2,3,4,5,6,7,8,9,0};
int setarray(int startaddr, unsigned char *data, int no)
{
  int i
  for (i=startaddr;i<startaddr+no;i++)
   DataArry[i]=testdata[i-startaddr];
   return 0;
}


main()
{
  printf("%d",setarray(10,testdata, 10));

}
Complier 有warning:
不知哪裡有錯?幚幫我,呼叫setarray並印出來,謝謝!
本篇文章回覆於2003-05-14 22:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

世界和平
檢舉此回應
unsigned char DataArray[256];

int SetArray(int StartAddr, unsigned char *data, int no){
  if(!StartAddr||!data||no>16) return -1;
  while(no) DataArray[StartAddr + no] = data[--no];
  return no;
}

void main(){
  char TestData[10]={1,2,3,4,5,6,7,8,9,0};
  if(!SetArray(10, TestData, 10))
    for(i=0;i<10;++i)
      printf("%d,", DataArray[10+i]);
  else
    printf("Error");
}

說真的,這種寫作習慣並不好!
但交作業的話...就湊合著用吧....
本篇文章回覆於2003-05-15 10:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

麥克利
檢舉此回應
世界和平,謝謝你的幫忙.
請問哪裡有相關資料可以找的到ㄋ.因為總不能老是問你們程式如何寫..
謝 謝!
本篇文章回覆於2003-05-15 12:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

世界和平
檢舉此回應
應付作業的話,
基本上,課本應該就是你最好的資料了!
其它的,語法問題,內建函式問題,你都可以查線上Help
更深入的,或某些專業領域的,就得買其它的書來看。
除此之外,寫程式就是要多思考。
本篇文章回覆於2003-05-15 19:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

麥克利
檢舉此回應
世界和平大哥,我現在需要把他改成如下:
1.DataArray 請先設定初始值為 0。
2.設定 DataArray[idx] 時,idx 只有最小的 4 個 BITS 會改變,較大的 4 個 BITS 不變。
    用
       int hiaddr,loaddr;
       hiaddr=SatrtAddr & 0xfff0;
       loaddr=SatrtAddr & 0x000f; /* 較低的 4 個 BITS*/

       每次加 1 就加在 loaddr;
       array 的 index 就是 hiaddr+(loaddr & 0x0F)
3. 先把 DataArray[0]-DataArray[32] 印出來,
      呼叫 SetArray 之後再印出一次

我又不知如何改了啦,還真難ㄝ!>_<
本篇文章回覆於2003-05-17 02:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

麥克利
檢舉此回應
這是我寫的,complier沒錯,但是結果沒印出來
===============================
程式碼
================================

#include <stdio.h>

unsigned char DataArray[256];
int hiaddr,loaddr;

int SetArray(int StartAddr, unsigned char *data, int no)
{
 int i;
 StartAddr=0;
 hiaddr=StartAddr & 0xfff0;
 loaddr=StartAddr & 0x000f;
 if (data|| no>16) return -1;
 for (i=0;i<no;i++) 
  { 
   DataArray[StartAddr+i]=data[i];
   printf("%d",DataArray[StartAddr+i]);
   } 
  return no;
}

void main()
{
  char TestData[10]={1,2,3,4,5,6,7,8,9,0};
  SetArray(0x2A, TestData, 10);
}

本篇文章回覆於2003-05-17 03:17
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
作者回應

麥克利
檢舉此回應
我知道問題在哪裡了
本篇文章回覆於2003-05-17 03:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
作者回應

麥克利
檢舉此回應
我寫出來的程式並不是我老師要的,他後來又加上註解,我不了解,請各位大大可不可以給我指點指點,謝謝!
==========================
程式碼和註解
==========================
1.DataArray 請先設定初始值為 0,以便後續程式結果的判斷。
這應該是在 [1] 的地方做。例如把整個array 都設成 0。

   2.設定 DataArray[idx] 時,idx 只有最小的 4 個 BITS 會改變,較大的 4 個 BITS 不變。
     你可以用
       int hiaddr,loaddr;
       hiaddr=SatrtAddr & 0xfff0;
       loaddr=SatrtAddr & 0x000f; /* 較低的 4 個 BITS*/

       每次加 1 就加在 loaddr;
       array 的 index 就是 hiaddr+(loaddr & 0x0F)

*/
#include <stdio.h>


unsigned char DataArray[256];
int hiaddr,loaddr;

int SetArray(int StartAddr,unsigned char *data, int no)
{

 int i,j;
 //StartAddr=0;
 hiaddr=StartAddr & 0xfff0;
 loaddr=StartAddr & 0x000f;
 if(StartAddr==0||!data||no>16) return -1; //**** StartAddr 可以是 0 啊! ****
/* 移到 main 去做。
 printf("init. \n");
 for (j=0;j<=32;j++)
 {
  DataArray[j]=data[j];
  printf("DataArray[0x%x]=%d ,",j,DataArray[j]);
 }
*/
 printf("\nafter call SetArray result:\n");
 for (i=0;i<=no;i++) //**** for(i=0;i<no;i++) 才是做 no 次。
 {
  DataArray[StartAddr+i]=data[i];        //**** 這裡 DataArray 用的 index 要用 (hiaddr+loaddr)
                                          // 然後 loaddr++;
                                          // 然後 loaddr &= 0x0F;
                                          // 這樣就會讓下一個 idx 只有改變最小的 4 BITS。
  printf("DataArray[0x%x]=%d ,",StartAddr+i ,DataArray[StartAddr+i]);
 }
 return no;
}

void main()
{

 char TestData[10]={1,2,3,4,5,6,7,8,9,0};
// [1] 先把 DataArray[] 都設成 0
 SetArray(0x2A,TestData,10); // 呼叫這一行之前,先想一下他應該回得到什麼樣的結果。
                                 // 例如呼叫 SetArray(0x0A,TestData,10);
                                 /*
                                 那應該是
                                 DataArray[0]=7(=TestData[6])
                                 DataArray[1]=8(=TestData[7])
                                 DataArray[2]=9(=TestData[8])
                                 DataArray[3]=0(=TestData[9])
                                 DataArray[4]=0(不變)
                                 DataArray[5]=0(不變)
                                 DataArray[6]=0(不變)
                                 DataArray[7]=0(不變)
                                 DataArray[8]=0(不變)
                                 DataArray[9]=0(不變)
                                 DataArray[0x0A]=1(=TestData[0])
                                 DataArray[0x0B]=2(=TestData[1])
                                 DataArray[0x0C]=3(=TestData[2])
                                 DataArray[0x0D]=4(=TestData[3])
                                 DataArray[0x0E]=5(=TestData[4])
                                 DataArray[0x0F]=6(=TestData[5])
                                 DataArray[0x10]=0 (不變)
                                 */
// 這裡再印出 DataArray[] 的內容,看是不是要設定的位置都有設成功。
}
本篇文章回覆於2003-05-19 14:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.