2015-03-02 18 views
0

我正在計算一些數字(介於0和255之間),我想要將它們存儲在C中的char數組使用它們的ASCII等效。尋找存儲在字符數組通過其等效的ASCII值在C

有沒有這樣做的好方法?

int b = (int)(*pixelA.pixel_b * (1-w) * (1-h) + 
       *pixelB.pixel_b * (w) * (1-h) + 
       *pixelC.pixel_b * (1-w) * (h) + 
       *pixelD.pixel_b * (w*h)); 

modified_Frame[k] = (char)b; 

這是那種我的目標的事情,如果(char)意味着它採取了價值b,並寫ASCII等效到數組。

我試圖用兩個指針(希望C將只是自動做到這一點),像這樣:

int *pb = &b; 
modified_Frame[k] = *pb; 

並使用b字符,而不是一個int;然而,它似乎只是發回塊數據,所以我猜這是行不通的。

任何想法將不勝感激。

編輯以提供更多的信息:

我在一個字節數組讀,把它保存到一個字符數組,然後試圖對它進行一些雙線性插值,發送修改後的版本回來。下面的代碼顯示了大部分過程。

當我說ASCII等價物時,這是因爲它們是字節,所以可以從0-255變化,這似乎是從一個小玩法的ASCII等價物(例如用'z'填充數組導致值122發送)。

n = read(conn_desc, &framebuff[ntotal], incomingframesize-ntotal); 

char modified_Frame[((incomingframesize*4)-(54*3))]; 

for (i=0;i<newYSize;i++) 
{ 
    y = (int)(y_ratio * i); 
    for (j=0;j<newXSize;j++) 
    { 
     x = (int)(x_ratio * j); 
     w = (x_ratio * j) - x; 
     h = (y_ratio * i) - y; 

     pixelA.pixel_b = &framebuff[GET_PIXEL_B(x,y)]; 
     pixelA.pixel_g = &framebuff[GET_PIXEL_G(x,y)]; 
     pixelA.pixel_r = &framebuff[GET_PIXEL_R(x,y)]; 

     pixelB.pixel_b = &framebuff[GET_PIXEL_B(x+1,y)]; 
     pixelB.pixel_g = &framebuff[GET_PIXEL_G(x+1,y)]; 
     pixelB.pixel_r = &framebuff[GET_PIXEL_R(x+1,y)]; 

     pixelC.pixel_b = &framebuff[GET_PIXEL_B(x,y+1)]; 
     pixelC.pixel_g = &framebuff[GET_PIXEL_G(x,y+1)]; 
     pixelC.pixel_r = &framebuff[GET_PIXEL_R(x,y+1)]; 

     pixelD.pixel_b = &framebuff[GET_PIXEL_B(x+1,y+1)]; 
     pixelD.pixel_g = &framebuff[GET_PIXEL_G(x+1,y+1)]; 
     pixelD.pixel_r = &framebuff[GET_PIXEL_R(x+1,y+1)]; 


     int r = (int)(*pixelA.pixel_r * (1-w) * (1-h) + *pixelB.pixel_r * (w) * (1-h) + *pixelC.pixel_r * (1-w) * (h) + *pixelD.pixel_r * (w*h)); 
     int g = (int)(*pixelA.pixel_g * (1-w) * (1-h) + *pixelB.pixel_g * (w) * (1-h) + *pixelC.pixel_g * (1-w) * (h) + *pixelD.pixel_g * (w*h)); 
     int b = (int)(*pixelA.pixel_b * (1-w) * (1-h) + *pixelB.pixel_b * (w) * (1-h) + *pixelC.pixel_b * (1-w) * (h) + *pixelD.pixel_b * (w*h)); 

     modified_Frame[k] = b; 
     k++; 
     modified_Frame[k] = g; 
     k++; 
     modified_Frame[k] = r; 
     k++; 
    } 
} 

這是一個嘗試'翻譯'我曾經工作了一段時間的C#算法。

+1

is modified_Frame a char *? – elrobe 2015-03-03 00:01:21

+2

我很難相信第一個方程總是會生成0到255之間的數字。但是如果有,並且如果'modified_Frame'是一個'unsigned char'的數組,那麼'modified_Frame [k] =(unsigned char)b; '應該工作。 – user3386109 2015-03-03 00:01:36

+2

演員陣容多餘 – 2015-03-03 00:02:56

回答

0
perhaps the following would work for you. 

int main() 
{ 
    int myint = 25; //could actually be any int value 0...255 

    char mychar; 

    mychar = (char)(myint&0xFF); 

    return (int)mychar; 
} 
+0

所有上述演員都是多餘的。小於int的類型總是被提升爲int(或unsigned int)。爲較窄類型指定值將截斷該值 – 2015-03-03 04:41:31

相關問題