台灣最大程式設計社群網站
線上人數
1558
 
會員總數:246319
討論主題:189850
歡迎您免費加入會員
討論區列表 >> Java >> C語言轉java問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
C語言轉java問題
價值 : 15 QP  點閱數:2539 回應數:3
樓主

cici
門外漢
0 1
80 1
發送站內信

目前我在把一個C語言的程式轉成java,不過碰到問題了
--C語言的
while( (count=read( fd, in_buf, ksz) ) > 0 ){
offset++;

for( i=0; i<count; i++){
if( (offset-1)% 2 == 0 )
c=(in_buf[i]-key[i]-offset)%128;
else
c=(in_buf[i]-key[i]-offset+1)%128;

if( c<0)
c+=128;
printf("%c",c);
}
}
--java的
for(int i = 0;i<test.length;i+=key.length)//test[]是我的buffer
{
offset++;
for(int j = 0;j<key.length;j++)
{
if(i+j<test.length)
{
if( (offset-1)% 2 == 0 )
{
c=((int)test[i+j]-(int)key[j]-offset)%128;
}
else
{
c=((int)test[i+j]-(int)key[j]-offset+1)%128;
}
if( c<0)
{
c+=128;
}
System.out.println((char)c);

}
}

}
--

C跟java offset的值跑出來不一樣
read()在C裡是指從in_buf裡讀取ksz個出來沒錯吧
我想應該是我offset++放錯地方了,可是我不知道該擺哪...
不知道有沒有人可以指點我一下

本篇文章發表於2012-02-24 01:05
1樓
回應

香帥
檢舉此回應
java 也有 read 及 while為何不對應它呢
public int read(byte b[],int off,int len)
本篇文章回覆於2012-02-24 01:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

cici
檢舉此回應
!! 我不知道java也有這個函數,剛剛去查了一下,然後改了一下
不過原本C語言裡的in_buffer的類型是char
我在這裡改成了byte...因為java的read()要byte[]
offset的值還是不一樣 java的比C還多跑了幾個值


InputStream input = new FileInputStream(filename);

byte key2[] = input_key.getBytes();
int offset = 0;
for(int i = 0;i<key2.length;i++)
{
offset+= key2[i];
}
int c = 0;
offset = offset % 128;

int count = 0;
int counttime = 0;
byte buffer[] = file(filename);

while((count = input.read(buffer, 0, key2.length))>0)
{
offset++;
for( int i=0; i<count; i++)
{
if( (offset-1)% 2 == 0 )
c=(buffer[i]-key[i]-offset)%128;
else
c=(buffer[i]-key[i]-offset+1)%128;

if( c<0)
c+=128;

}

}
本篇文章回覆於2012-02-25 05:56
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

香帥
檢舉此回應
因為以下這一行程式c那裡沒有
offset = offset % 128;
最好樓主要附檔案出來
及舉例要正確產生的數值
不然真的不知
offset = offset % 128
您這一行多出來的用意是做甚麼
本篇文章回覆於2012-02-25 09:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

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