當前位置:首頁 » 編程語言 » c語言轉換為代碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言轉換為代碼

發布時間: 2022-07-03 15:04:10

1. 如何將下面c語言代碼轉換成Java代碼

完整的直譯為java方法是這樣的,但是這樣寫dataLen的值必須小於等於數組長度,不然會出現下標越界的異常

public int accumulativeVerification(int[] data, int dataLen) {
    int sum = 0;
    for (int i = 0; i < dataLen; i++) {
        sum += data[i];
    }
    return sum;
}

如果是意譯(計算int數組的所有數之和),那麼java可以這樣寫

public int accumulativeVerification(int[] data) {
    int sum = 0;
    for (int i = 0; i < data.length; i++) {
        sum += data[i];
    }
    return sum;
}

2. 在C語言中如何將漢字或者字元串轉換成二進制代碼或者ASCII代碼

我記得好像漢字是用點陣存儲的,就是把字形用點陣表示出來,具體細節不是很清楚,字元串可以用數組存儲,拆分成一個一個的字元,一個字元對應一個ASCII碼

3. 如何將C語言代碼轉換為對應的匯編代碼

VC6.0下有兩種方法:
(1)增加參數/FA:Project->Setting...,C/C++選項卡中的Project Options中增加參數/FA,編譯後debug目錄中將會增加對應源文件的匯編文件(*.asm)。
(2)如果想查看C語句對應的匯編代碼的話,可以這樣:F11單步調試,在debug工具欄中選擇「disassembly」即可。每行C代碼下面就是對應的匯編代碼。
如果debug工具欄不見了,可在VC上方空白菜單處右鍵,選擇「debug」即可彈出debug工具欄。

例如:
C代碼程序:
int main()
{
int a = 3;
int b = 4;
int c = a + b;
printf("c=%d/n", c);

return 0;
}

對應的匯編代碼程序(部分)如下:
5: int a = 3;
00401028 mov dword ptr [ebp-4],3
6: int b = 4;
0040102F mov dword ptr [ebp-8],4
7: int c = a + b;
00401036 mov eax,dword ptr [ebp-4]
00401039 add eax,dword ptr [ebp-8]
0040103C mov dword ptr [ebp-0Ch],eax

gcc下編譯加參數-S,如gcc a.c -S,編譯後會自動生成匯編文件a.asm。

4. c語言如何將一段自定義的buff轉換成可執行的代碼

__declspec(noinline)voidhelloworld()
{
printf("helloworld");
"helloworld"(4221E0h)
004017C5E878A40000callprintf(40BC42h)
004017CA59popecx
}

因為代碼生成的匯編指令call是相對位置的

E8 78 A4 00 00 這個, e8表示相對地址調用,後面78 A4 00 00 表示的 當前的地址和printf函數地址的偏移。


如果自己memcpy復制後,helloworld函數的地址變了,那個call指令和 printf函數的偏移距離也變了。所以就出錯了。


所以這個復制代碼的方式要正常工作的話,這段代碼必須是位置無關的,也就是

Position-independentcode

gcc裡面可以指定pic選項來讓編譯器生成位置無關的代碼。vc裡面找了一下沒找到。

所以只能使用匯編才行了。


charformat[]="%s%s ";
charhello[]="Hello";
charworld[]="world";
staticintprintf_addr=(int)&printf;

__declspec(noinline)voidhelloworld()
{
//printf("helloworld");
__asm
{
moveax,offsetworld
pusheax
moveax,offsethello
pusheax
moveax,offsetformat
pusheax
//callprintf
moveax,printf_addr
calleax
//
//
popebx
popebx
popebx
}
}


這樣寫之後,這個call指令那裡,生成的機器碼採用的是絕對值的FF,就可以正常工作了。


所以這種用法的話,還是自己手寫位置無關的匯編才行,或者需要會自己做重定位的。就像上面那個一樣 自己知道call指令的那裡的話,可以自己修改偏移為正確的值。

5. c語言怎麼將文字轉換成代碼

演算法設計的問題吧
先設計int
child[10]並初始化即每個小孩手上的糖
然後while控制循環條件即child中每個值相等跳出循環
循環是:所有的小孩同時將手中的糖分一半給右邊的小孩;糖塊為奇數的人可向老師要一塊。
對應的child數組各值的變化,在while里加個統計次數的變數
思想大概就是這樣
要自己動手去實現才能有進步

6. 把C語言代碼轉成Java代碼

package dis;
import java.io.*;
import java.math.*;
public class dis
{
public static void main(String [] s) throws Exception
{
Float a,b,c;
double x2;
double x1;
System.out.println("請輸入a, b, c的值");
BufferedReader bReader=new BufferedReader(new InputStreamReader(System.in));
a=Float.parseFloat(bReader.readLine());
b=Float.parseFloat(bReader.readLine());
c=Float.parseFloat(bReader.readLine());
if (b*b - 4*a*c <= 0)
System.out.println("輸入的系數不對,b2-4ac不大於0!程序退出!");
else
{
x1 = (-b + Math.sqrt(b*b - 4*a*c))/2*a;
x2 = (-b - Math.sqrt(b*b - 4*a*c))/2*a;

System.out.println("x1 = "+ x1);
System.out.println("x2 = "+x2);
}
return;
}

}

7. C語言採用解釋方式將源程序轉換為二進制的目標代碼嗎

不是,C語言採用編譯方式將源程序轉換為二進制的目標代碼。使用C語言編譯器來完成。

所謂C語言編譯器,就是把編程得到的文件,比如.c,.h的文件,進行讀取,並對內容進行分析,按照C語言的規則,將其轉換成cpu可以執行的二進制文件。其本質在於對文件的讀入,分析,及處理。

C語言編寫的程序代碼稱為源程序,對於計算機本身來說,它並不能直接識別由高級語言編寫的程序。C語言程序經C語言編譯程序編譯後,生成後綴為.obj的二進制文件(稱為目標文件)。

此.obj文件必須與系統提供的各種庫函數連接起來生成一個後綴為.exe的可執行文件才可以執行。C語言的可執行文件由一系列機器指令構成的。

(7)c語言轉換為代碼擴展閱讀

解釋執行和編譯執行是計算機語言的執行方式。解釋執行由解釋器現場解釋執行,不生成目標程序。如BASIC便是解釋執行,一般解釋執行效率較低,低於編譯執行。

編譯執行由編譯程序將目標代碼一次性編譯成目標程序,再由機器運行目標程序。如:PASCAL,C,C++,delphi等語言。效率高於解釋執行。

8. 怎麼把這個C語言代碼轉化為c++代碼

實際上這段代碼也算是C++代碼,C語言是C++的子集,這段代碼可以使用C++編譯器編譯的。

如果一定要改這段代碼的話,也只能替換輸入輸出語句了:


#include <iostream>

using namespace std;

int main()
{
int n,r,i;

while(cin >> n >> r) {
if(n<0) {
cout << '-';
n=-n;
}
if(n==0) {
cout << '0' << endl;
continue;
}

int c=0, a[100];
while(n) {
a[c] = n % r;
c++;
n /= r;
}
for(i=c-1;i>=0;i--) {
if(a[i]>=10) {
cout << 'A' + a[i] - 10;
} else {
cout << a[i];
}
}
cout << endl;
}
}

9. c語言中字元串能否轉為代碼執行或者有什麼替代辦法

在循環中是不可以用宏定義的方法來實現的,因為宏是在編譯前替換,不會根據代碼邏輯來。

用數組肯定是最合理的,多個變數的方法,有一種不安全的方法來做,就是使用野指針。

前提:變數連續定義,這樣他們在內存中的地址就是連續的。

之後用一個int指針:

int*pi=&data1;
pi++;//就指向data2了

但這個方法,不是安全方法,如果是商業項目,不推薦使用。

10. C語言中如何將字元轉變為ASCII代碼值

你想問什麼問題啊??
ascii
美國標准信息交換標准碼
(
american
standard
code
for
information
interchange,
ascii
)
在計算機中,所有的數據在存儲和運算時都要使用二進制數表示(因為計算機比較傻,只有0和1兩位數的二進制比較適合於它使用),同樣的,象a、b、c、d這樣的52個字母(包括大寫)、以及0、1、2等數字還有一些常用的符號(例如*、#、@等)在計算機中存儲時也要使用二進制數來表示,而具體用哪個數字表示哪個符號,當然每個人都可以約定自己的一套(這就叫編碼),而大家如果要想互相通訊而不造成混亂,那麼大家就必須使用相同的編碼規則,於是美國有關的標准化組織就出台了所謂的ascii編碼,統一規定了上述常用符號用哪個二進制數來表示。
美國標准信息交換代碼是由美國國家標准學會(american
national
standard
institute
,
ansi
)制定的,標準的單位元組字元編碼方案,用於基於文本的數據。起始於50年代後期,在1967年定案。它最初是美國國家標准,供不同計算機在相互通信時用作共同遵守的西文字元編碼標准,它已被國際標准化組織(international
organization
for
standardization,
iso)定為國際標准,稱為iso
646標准。適用於所有拉丁文字字母。
ascii
碼使用指定的
7
位或
8
位二進制數組合來表示
128

256
種可能的字元。標准
ascii
碼也叫基礎ascii碼,使用
7
位二進制數來表示所有的大寫和小寫字母,數字
0

9、標點符號,
以及在美式英語中使用的特殊控制字元。其中:
0~32及127(共34個)是控制字元或通訊專用字元(其餘為可顯示字元),如控制符:lf(換行)、cr(回車)、ff(換頁)、del(刪除)、bs(退格)、bel(振鈴)等;通訊專用字元:soh(文頭)、eot(文尾)、ack(確認)等;ascii值為
8、9、10

13
分別轉換為退格、製表、換行和回車字元。它們並沒有特定的圖形顯示,但會依不同的應用程序,而對文本顯示有不同的影響。
33~126(共94個)是字元,其中48~57為0到9十個阿拉伯數字;
65~90為26個大寫英文字母,97~122號為26個小寫英文字母,其餘為一些標點符號、運算符號等。
同時還要注意,在標准ascii中,其最高位(b7)用作奇偶校驗位。所謂奇偶校驗,是指在代碼傳送過程中用來檢驗是否出現錯誤的一種方法,一般分奇校驗和偶校驗兩種。奇校驗規定:正確的代碼一個位元組中1的個數必須是奇數,若非奇數,則在最高位b7添1;偶校驗規定:正確的代碼一個位元組中1的個數必須是偶數,若非偶數,則在最高位b7添1。
後128個稱為擴展ascii碼,目前許多基於x86的系統都支持使用擴展(或「高」)ascii。擴展
ascii
碼允許將每個字元的第
8
位用於確定附加的
128
個特殊符號字元、外來語字母和圖形符號。