我需要一些我刚刚收到帮助的代码的帮助。基本上,这段代码是用 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 作为编程环境,所以可能会出现错误消息与众不同。我使用以下 main 来运行我的程序:
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 行:错误 UNTITLED2.C:旧式函数声明缺少参数声明列表。第 1 行:ERROR UNTITLED2.C:',' 缺失/预期。
第 6 行:错误 UNTITLED2.C:需要常量表达式。
第 10 行:错误 UNTITLED2.C:无效的表达式。
第 10 行:错误 UNTITLED2.C:缺少字符 ';'。
第 10 行:错误 UNTITLED2.C:缺少字符 ';'。
第 10 行:错误 UNTITLED2.C:缺少字符 ')'。
第 10 行:错误 UNTITLED2.C:缺少字符 ')'。
第 10 行:错误 UNTITLED2.C:无效的表达式。
第 10 行:警告 UNTITLED2.C:转换为不兼容的指针类型第 19 行:警告 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 行:错误 UNTITLED3.C:不允许分配给只读变量。第 4 行:ERROR UNTITLED3.C:关键字“const”只能用于全局变量和静态局部变量。第 7 行:警告 UNTITLED3.C:转换为不兼容的指针类型第 7 行:警告 UNTITLED3.C:转换为不兼容的指针类型第 7 行:警告 UNTITLED3.C:转换为不兼容的指针类型第 15 行:警告 UNTITLED3.C:类型不匹配:表达式中使用的不兼容类型 char[] 和 unsigned int。第 15 行:错误 UNTITLED3.C:无效的表达式 - 需要左值。
第 15 行:错误 UNTITLED3.C:s 超出范围/未声明。
第 15 行:错误 UNTITLED3.C:缺少字符 ';
第 15 行:错误 UNTITLED3.C:字符串超出范围/未声明。第 16 行:警告 UNTITLED3.C:转换为不兼容的指针类型第 16 行:警告 UNTITLED3.C:参数 1 的类型错误。
第 16 行:错误 UNTITLED3.C:s 超出范围/未声明。
第 16 行:错误 UNTITLED3.C:DynamicC 不支持数组分配。第 16 行:错误 UNTITLED3.C:无效的表达式 - 需要左值。