2016-04-13 12 views
1

私は256の整数を含むバッファを持っているので、16x16の行列を作ります。私が達成しようとしているのは、それが行列であるかのようにバッファに格納された値を読み込むことです。 座標が5と3の場合は、Yが5、YがXの値を取得する必要があります。CでXとYの値を使って行列をバッファとして読む

たとえば、ここではバッファの小さな部分ですが、読みやすいように16x3の行列です私が言うの値を取得しようとした場合、私は値を返す必要があり、Yに、= 2、およびX = 5を0ではなく)1よりそう

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 
7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 
4 5 6 7 8 9 1 0 2 3 4 5 6 7 8 9 

のこの開始インデックスを検討9.

私がすでに持っているコードの一部ですが、私の数学はオフです。

unsigned char getTablevalue(int tableIndex, unsigned char *buffer) { 
    return buffer[tableIndex]; 
} 

void getInput(....) { 
    int yValue = 2; 
    int xValue = 5; 
    int returnValue = 0; 
    unsigned char *buffer = malloc(256 * sizeof (unsigned char)); 
    memset(buffer, 0, 256); 

    ... Some code to fill buffer... 
    returnValue = getTablevalue({what can I put here}, buffer); 

} 

これについてのお手伝いをさせていただきます。前もって感謝します。

+0

乗算COLと行を追加。あなたのインデックスがあります。 –

+0

「yValue * 16 + xValue」。もちろん、バッファーを正しく充填したかどうかによって異なります。 – user3386109

+0

なぜ2D配列を使用しないのですか? – Olaf

答えて

2

これは、バッファを配列として使用し、バッファ '配列'を実際の配列にコピーする方法を示しています。

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int n; 
    int x, y; 
    int arr[16][16]; 
    int xtest =2, ytest =12; //'random values to test that it works 

    /* allocate space for a buffer of 256 values in the range 0 to 255) */ 
    unsigned char *buffer = malloc(256 * sizeof (unsigned char)); 

    /* fill the buffer with sequential values from 0 to 255 */ 
    for (n = 0; n < 256; n++) { 
     buffer[n] = n; 
    } 

    /* just to check the fill was OK - print out the buffer contents */ 
    for (n = 0; n < 256; n++) { 
     printf("%d .. ", buffer[n]); 
    } 
    printf("\n\n"); 

    /* fill a 16 * 16 array with values from the buffer 
     that the buffer data is arranged in 16 groups of 16 values in a 
     single sequential buffer */ 
    for (x = 0; x < 16; x++) { 
     for (y = 0; y < 16; y++) { 
      arr[x][y] = buffer[(x * 16) + y]; 
     } 
    } 

    /* print out the array */ 
    for (x = 0; x < 16; x++) { 
     for (y = 0; y < 16; y++) { 
      printf("%d\t", arr[x][y]); 
     } 
     printf("\n"); 
    } 
    printf("\n\n"); 

    /* just print a 'random' xy value from the matrix and from the buffer 
     they will be the same (we hope) */ 
    printf("X=%d,Y=%d, Matrix[%d][%d] is: %d ... and Buffer %d,%d is %d\n", 
      xtest, ytest, xtest, ytest, arr[xtest][ytest], 
      xtest, ytest, buffer[(xtest * 16) + ytest]); 
    if (arr[xtest][ytest] == buffer[(xtest * 16) + ytest]) { 
     printf("Wow - they ARE the same\n"); 
     } else { 
     printf("Oh No - they are different\n"); 
    } 
}  
16によって

サンプル出力

X=2,Y=12, Matrix[2][12] is: 44 ... and Buffer 2,12 is 44 Wow - they ARE the same
+0

それは本当にあなたの素晴らしいです、ありがとう。私はこれらのことのいくつかを採用することができました。高性能ヒット、バッファからの読み込み、または配列への移動は何でしょうか。特定の入力に対して256回(各値を取得するために)値をチェックするコールが行われます。 – TyrantUT

+0

私は、どちらかが他人であるかどうかは分かりません。しかし、どのように関数に渡され、どのように配列にアクセスできるかといった、従来の配列については、利用可能な情報がたくさんあります。[[] '添字だけでなく、配列へのポインタを操作することによっても、従来の配列 - それはすべての良い学習です。 私の答えが役に立ったと思った場合は、+1または受け入れてもらえませんか。 – anita2R

関連する問題