ヘルプを受け取ったばかりのコードについて少し助けが必要です。基本的に、このコードは Java で書かれていますが、C でも動作できるようにする必要があります。私はすでにコードをテストしており、正常に動作します。基本的にバイナリ文字列を話し、それをバイト配列に配置し、各場所に 8 文字 (1 と 0) を保持します。私は決して変わらないいくつかの変数を知っており、それらを以下にリストしました:
Byte.SIZE は常に 8 です
sLen は常に 64 です
len は常に 8 です
Javaコードと変換を試みる試みを含めました。ただし、私のコードには一貫して実行時エラーやその他の構文の問題があります。誰かが私の問題を見つけることができるかどうか疑問に思っていました:
Java コード
static byte[] fromBinary(String s) {
int sLen = s.length(), len = sLen / Byte.SIZE;
if (sLen % Byte.SIZE != 0) {
len++;
}
byte[] toReturn = new byte[len];
for (int i = 0; i < sLen; i++) {
if (s.charAt(i) == '1') {
toReturn[i / Byte.SIZE] = (byte) (toReturn[i / Byte.SIZE] | (0x80 >>> (i % Byte.SIZE)));
}
}
return toReturn;
}
Cコード
char fromBinary [] (String s) {
int sLen =64;
int len=8;
int i=0;
char toReturn [8];
char str [64]=s;
for (i = 0; i < sLen; i++) {
if (str[i] == '1') {
toReturn[i/8] = (char)(toReturn[i/8] | (0x80 >>> (i%8)));
}
}
return toReturn;
}
申し訳ありませんが、私は C に比較的慣れていません。数年間 Java でプログラミングを行っているため、C のエラーや構文に慣れていません。プログラミング環境として Dynamic C を使用しているため、エラー メッセージが表示される場合があります。異なる。次のメインを使用してプログラムを実行しました。
void main() {
char bytes [8];
string s ="1010110011011110010010000010001101000101011001111010101111001101";
bytes=fromBinary(s);
for (j=0;j<8;j++){
printf("%d",toReturn[j]);
printf(", ");
}
}
次のエラーのため、プログラムを実行できませんでした:
1 行目 : ERROR UNTITLED2.C : cofunctions のみインデックスできます。
1 行目 : ERROR UNTITLED2.C : 古いスタイルの関数宣言にパラメーター宣言リストがありません。行 1: ERROR UNTITLED2.C: ',' が見つからないか、予期されます。
行 6: ERROR UNTITLED2.C: 定数式が必要です。
10行目 : ERROR UNTITLED2.C : 無効な式です。
行 10: ERROR UNTITLED2.C: 文字「;」がありません。
行 10: ERROR UNTITLED2.C: 文字「;」がありません。
行 10: ERROR UNTITLED2.C: 文字「)」がありません。
行 10: ERROR UNTITLED2.C: 文字「)」がありません。
10行目 : ERROR UNTITLED2.C : 無効な式です。
10 行目 : WARNING UNTITLED2.C : 互換性のないポインター型への変換 19 行目 : WARNING UNTITLED2.C : 型の不一致: 互換性のない型 char[] と unsigned int が式で使用されています。10 エラーに達しました。さらなるエラーが抑制されました。
何が間違っているのかわかりません。どんな洞察も高く評価されます。すべての混乱について申し訳ありません。
最新のアップデート
unsigned char *fromBinary(const char * const s) {
static unsigned char toReturn[8]={0};
size_t i,j;
const size_t len=8;
for(i=0;i<len;i++) {
for(j=0;j<8;j++)
toReturn[i]|=(s[i*8+j]=='1' ? 1<<(7-j) : 0);
}
return toReturn;
}
void main() {
unsigned char bytes [8];
string s ="1010110011011110010010000010001101000101011001111010101111001101";
fromBinary(s)
for (j=0;j<8;j++){
printf("%d",toReturn[j]);
printf(", ");
}
}
私に次のエラーを与えました:
行 1 : ERROR UNTITLED3.C : キーワード 'const' は、グローバルおよび静的ローカルでのみ使用できます。4 行目 : ERROR UNTITLED3.C : 読み取り専用変数への代入は許可されていません。行 4 : ERROR UNTITLED3.C : キーワード 'const' は、グローバルおよび静的ローカルでのみ使用できます。7 行目 : WARNING UNTITLED3.C : 互換性のないポインター型への変換 7 行目 : WARNING UNTITLED3.C : 互換性のないポインター型への変換 7 行目 : WARNING UNTITLED3.C : 互換性のないポインター型への変換 15 行目 : WARNING UNTITLED3.C : 型の不一致:互換性のない型 char[] と unsigned int が式で使用されています。行 15: ERROR UNTITLED3.C: 無効な式 - 左辺値が必要です。
行 15: ERROR UNTITLED3.C: s はスコープ外/宣言されていません。
行 15: ERROR UNTITLED3.C: 文字がありません ';
行 15: ERROR UNTITLED3.C: 文字列が範囲外/宣言されていません。16 行目 : WARNING UNTITLED3.C : 互換性のないポインター型への変換 16 行目 : WARNING UNTITLED3.C : パラメーター 1 の型が間違っています
。
16 行目: ERROR UNTITLED3.C : DynamicC は配列の代入をサポートしていません。行 16: ERROR UNTITLED3.C: 無効な式 - 左辺値が必要です。