用C語言編寫簡單的介面程式

 在通訊中,為了保證運行安全可靠,標準的串列口必須具有許多握手訊號和狀態資訊。這是因為通訊的各個電腦CPU 速度不一樣(這會導致“錯幀”)以及發送機發送資料速度比接收機接收速度快(這會導致“過沖”)。為解決這個問題,我們採用一個簡單的握手訊號,即發送機每次僅發送半個位元組(低4 位)的資料,而另外半個位元組(高4 位)則用來傳送資訊。我們可以對資訊位(高4 位)進行如下簡單的編碼:  0H:發送的是新的半個位元組資料a  1H:重新發送上次傳送錯誤的資料  2H:檔案名稱結束  3H:檔案結束 

MINA服務端與C++用戶端通訊(1)

最近學習了Apache MINA通訊,在使用過程中碰到了一些問題,記錄下一些心得。在服務端和用戶端都使用MINA提供的庫時,通訊一切正常,當我把用戶端改為C++代碼時,發現用戶端發送給服務端的二進位流中的整形資料,位置被倒置了。C++用戶端16進位  :0x00000013MINA服務端16進位:0x13000000查詢了網上資料後才知道Java在所有平台上都預設是big-endian,而C++在不同的平台上有不同的位元組序, X86上是little-endian,

C++ sizeof等。。。。

#include <iostream>#include <string>using namespace std;class A{public:A(){cout << "creat A" << endl;scc();}virtual void scc(){cout << "scc from A" << endl;}virtual ~A(){cout << "delete A" <<

學習C++的建議(Suggestions for learning C++)

  學習C++的建議(Suggestions for learning C++)——From:The C++ Programming Language一、給C程式員的建議Suggestions for C Programmers[1] Macros are almost never necessary in C++. Use c o n s t or e n u m to define manifest constants,i n l i n e to avoid

const 在C/C++裡面的用途

11.1 使用const提高函數的健壯性看到const關鍵字,C++程式員首先想到的可能是const常量。這可不是良好的條件反射。如果只知道用const定義常量,那麼相當於把火藥僅用於製作鞭炮。const更大的魅力是它可以修飾函數的參數、傳回值,甚至函數的定義體。const是constant的縮寫,“恒定不變”的意思。被const修飾的東西都受到強制保護,可以預防意外的變動,能提高程式的健壯性。所以很多C++程式設計書籍建議:“Use const whenever you need”。 11.1

C# 通訊時位元組流和結構體互轉

//Author:smilelance//From:http://blog.csdn.net/smilelance//轉換C#代碼:using System.Runtime.InteropServices;//結構體轉換成位元組流public static byte[] StructToBytes<T>(T obj)    {int size = Marshal.SizeOf(typeof(T));   IntPtr bufferPtr = Marshal.AllocHGlobal(

為什麼C++ 並沒有”王者歸來”?

Why C++ Is Not “Back”又引起了爭論,主要觀點是:C++ is the wrong direction for the future, C++對於未來是一個錯誤方向,大意翻譯如下:最大問題是語言應該越來越簡單,抽象層次越來越高,而不是減少。(banq註:領域驅動分層關係的疑惑)當然總是會有需要低層級的代碼,但我們今天寫的代碼的大部分是在一個更高的水平。我是許多年前跳下C++這條船,我終於可以再也不用糾結C++比C#快上面了。很長時間,我依然相信過去所有對C++的投入都沒有白費,

重讀經典-《Effective C++》Item2:盡量以const,enum,inline替換#define

本部落格(http://blog.csdn.net/livelylittlefish)貼出作者(三二一@小魚)相關研究、學習內容所做的筆記,歡迎廣大朋友指正! 1. 宏定義 #define ASPECT_RATIO

面試題總結 – C 語言 – 指標

面試題總結 - C 語言 - 指標 1. 嵌入式系統經常具有要求程式員去訪問某特定的記憶體位置的特點。 在某工程中,要求設定一據對地址為0x67a9的整形變數的值為0xaa66,編譯器是一個純粹的ANSI編譯器寫帶碼去完成這一任務。注釋: 這一問題測試你是否知道為了訪問一個絕對位址,把一個整形數強制轉換(ypecast) 為一個指標是合法的,answer:   int* ptr;ptr = (int*) 0x67a9;*ptr = 0xaa66;一個較晦澀的方法是:*(int* const) (

深入理解C語言指標的奧秘-一篇很好的C指標教程

指標是一個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的一個地址。   要搞清一個指標需要搞清指標的四方面的內容:指標的類型,指標所指向的   類型,指標的值或者叫指標所指向的記憶體區,還有指標本身所佔據的記憶體區。讓我們分別說明。    先聲明幾個指標放著做例子:     例一:     (1)int*ptr;     (2)char*ptr;     (3)int**ptr;     (4)int(*ptr)[3];     (5)int*(*ptr)[4];        指標的類型  

《c專家編程》筆記–linux記憶體對齊

在最近的項目中,我們涉及到了“記憶體對齊”技術。對於大部分程式員來說,“記憶體對齊”對他們來說都應該是“透明的”。“記憶體對齊”應該是編譯器的 “管轄範圍”。編譯器為程式中的每個“資料單元”安排在適當的位置上。但是C語言的一個特點就是太靈活,太強大,它允許你幹預“記憶體對齊”。如果你想瞭解 更加底層的秘密,“記憶體對齊”對你就不應該再透明了。一、記憶體對齊的原因大部分的參考資料都是如是說的:1、平台原因(移植原因):不是所有的硬體平台都能訪問任意地址上的任意資料

《c陷阱和缺陷》筆記–C編譯器的注釋嵌套

本文轉載於:http://www.cnblogs.com/liuxiaoming/archive/2012/08/13/2636831.html某些C編譯器允許嵌套注釋。請寫一個測試程式,要求:無論是對允許嵌套注釋的編譯器,還是對不允許嵌套注釋的編譯器,該程式都能正常通過編譯,但是這兩種情況下程式執行的結果卻不同。首先,要說明的是C90隻有一種注釋風格,就是使用“/*”和“*/”,是沒有//注釋符號的。在預先處理階段,C前置處理器會剔除所有出現在“/*”和“*/”之間的內容(包括這對記號本身),

《c和指標》筆記–運算式作為左值或右值

下面的代碼,大家猜下結果分別是多少?#include <stdio.h>int main(void){ int i=1; int* cp = &i; printf("%d\n",++*cp++); return 0;}#include <stdio.h>int main(void){ int i=1; int* cp = &i; printf("%d\n",+

《c陷阱與缺陷》筆記–移位元運算

#include <stdio.h>int main(void){ int a = 2; a >> 32; a >> -1; a << 32; a << -1; return 0;}上面代碼編譯時間出現如下錯誤:yiwei.c: In function 'main':yiwei.c:5:2: warning: right shift count >

面試題總結 – C 語言 – 關鍵字(keywords)

1. 關鍵字Static的作用是什嗎?answer: 這個簡單的問題很少有人能回答完全,在C語言中,關鍵字static 有三個明顯的作用:1,  在函數體,一個被聲明為靜態變數在這一函數被調用的過程中其值不變。2, 在模組內(但在函數體外),一個被聲明為靜態變數可以被模組內的所有函數訪問,但不能被模組外地其他函數訪問,因為他是一個本地的全域變數。3,在模組內,一個被聲明為靜態函數只可被這一模組內的其他函數調用,那即是,這個函數被定義在聲明它的模組的本地範圍內使用。2.

《GLIB C MANUAL》–1.介紹

1.Introduction1.介紹The C language provides no built-in facilities for performing such common operations as input/output, memory management, string manipulation, and the like. Instead, these facilities are defined in a standard library, which you

《c陷阱與缺陷》筆記–注意邊界值

如果要自己實現一個擷取絕對值的函數,應該都沒有問題,我這邊也自己寫了一個:void myabs(int i){ if(i>=0){ printf("%d\n",i); }else{ printf("%d\n",-i); }}但是,這個函數真的沒有問題嗎?如果i的值為-2147483648,會怎樣,我們來試下:#include <stdio.h>void myabs(int i)

c實現輸出二維蛇形矩陣

直接上代碼:#include <malloc.h>#include <stdio.h>int main(void){//使用者輸入的值,建立n*n的矩陣int n;//蛇形從1開始計數int count = 1;//a[x][y],x是二維數組的第一個下標,y是第二個。//round是蛇形矩陣的第幾圈,從0開始。int x,y,round;scanf("%d",&n);int (*a)[n] =

《c陷阱與缺陷》筆記–負數的模數運算

本文轉載於:http://blog.sina.com.cn/s/blog_6f5c63ff0100tucb.html我們知道,在不同的語言中,對負數執行模數運算,結果有可能會是不同的。例如,(-11)%5在python中計算的結果是4,而在C(C99)中計算的結果則是-1。truncate除法 &&

《c和指標》筆記–包含位域結構體的記憶體對齊(32bit,GCC)

C99規定int、unsigned   int和bool可以作為位域類型。但編譯器幾乎都對此作了擴充,允許其它類型類型的存在。如果結構體中含有位域(bit-field),總結規則如下:(以下代碼在x86 32bit系統上測試,gcc 4.1.2)1) 如果相鄰位域欄位的類型相同,且其位寬之和小於類型的sizeof大小,則後面的欄位將緊鄰前一個欄位儲存,直到不能容納為止例:struct test1 {    char    a : 2;    char    b : 3;    char  

總頁數: 4314 1 .... 2470 2471 2472 2473 2474 .... 4314 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.