Just My Life & My Work

Archive for the ‘C&C++’ Category

[iOS] 混編Objective C、Swift、C/C++

在Swift剛釋出沒多久,我就研究過如何在同專案整合Objective C和Swift。文章:

儘管還是傾向以Objective C來開發產品,然而Swift的發展日趨重要,不過我大膽推測,就算Apple再怎麼強推Swift,十年內Objective C領導地位依然屹立不搖!為什麼呢?實際接觸4年Swift後,發現Swift變化多端,若猶豫要學Swift還是Objective C可以參考:要學Objective-C還是Swift?

現在想要混編Objective C、Swift、C/C++,應也不是問題~

[iOS] 混編Objective C、Swift、C:C++.png

(繼續閱讀…)

[C/C++] 4 bytes轉成integer (Convert 4 Bytes to Integer)

最近要讀取藍牙裝置回傳的資料來解析,需要將4 bytes轉成integer,才能知道訊號強度相對值。太久沒搞底層東東,有些生疏,好在嘗試一下就得到正確結果!

bluetooth Central Peripheral

(繼續閱讀…)

[C/C++] 配置2D陣列 (Allocate 2D Array)

最近要整合C/C++高人寫的Source Code,發現我自己好像斷手斷腳XD,因為要搞較為底層的記憶體空間配置⋯⋯先前寫Objective C多麼愜意,用不到的記憶體空間,系統會自動去釋放,但是在C/C++就要自己寫code處理呢!

現在想要配置2D陣列 (Allocate 2D Array),要怎麼做才好辦事呢?

以後都來這兒複製貼上吧XD~

/**
 Theme: Allocate 2D Array
 IDE: Xcode 9
 Language: C
 Date: 107/03/30
 Author: HappyMan
 Blog: https://cg2010studio.com/
 */

#include 
#include 

float** createArray(int m, int n)
{
    float* values = calloc(m * n, sizeof(float));
    float** rows = malloc(n * sizeof(float*));
    for (int i = 0; i < n; ++i) {
        rows[i] = values + i*m;
    }
    return rows;
}

void destroyArray(float** arr)
{
    free(*arr);
    free(arr);
}

int main()
{
    float** happyArr = createArray(2,3);
    happyArr[0][0] = 1;
    happyArr[0][1] = 1;
    happyArr[1][0] = 2;
    happyArr[1][1] = 2;
    happyArr[2][0] = 3;
    happyArr[2][1] = 3;

    destroyArray(happyArr);
    return 0;
}

我發現顯示code的外掛會讓下面兩行出問題~

#include <stdio.h>
#include <stdlib.h>

最後記得釋放記憶體唷~

參考:How to return a 2D array to a function in C?

[C/C++] 如何引用C標頭檔

最近要研究1992年程式高人寫的原始碼,看到Xcode上黃色驚嘆號標示說是非常早期的語法,好在還能編譯運作,不然要以目前C語法再刻一次,我真的會想去撞牆啊XD~

話說,我學生時代習慣用C++寫程式,現在想以C++來引用C標頭檔,雖然在Xcode中可以將.c改成.cpp,就能成功「騙」過編譯器,但那樣根本是多此一舉,明明是C語言還要宣示為C++語言。

查詢後原來很簡單如何引用C標頭檔,使用extern保留字標記C,大括號中就是引用C標頭檔。

[C++] 如何引用C標頭檔.png

高人解釋:

For a list of C standard C headers (stdio, stdlib, assert, …), prepend a c and remove the .h. For example stdio.h becomes cstdio.

For other headers, use

extern “C"

{

  #include “happy_header.h"

}

參考:Including C headers inside a C++ program

[Xcode] C++ 讀取所在目錄檔案

過去六年以來一直寫iOS App,讀檔方面路徑沒什麼問題。

然而在Xcode寫C++ code時候,碰到讀取本目錄下txt文件的內容,不想使用絕對路徑,那麼就是使用相對路徑。可以做如下設置,就可以打開文件並讀取!

[Xcode] C++ 讀取所在目錄檔案

(繼續閱讀…)

[C] 轉 uint8_t 為 uint16_t

因為串接藍芽裝置,想要從藍芽裝置獲得資訊或是傳送指令到藍芽裝置,需要瞭解其溝通協定,才能順利互通有無。

因為資料長度的關係,需要把資料型別短的組合成長的,如轉 uint8_t 為 uint16_t

原始資料:

uint8_t d1 = 0x01;
uint8_t d2 = 0x07;

轉成:

uint16_t wd = 0x0701;

此時需要瞭解點位元操作,就能寫程式實現。

程式實作:

uint16_t wd = ((uint16_t)d2 << 8) | d1;

原理:

(0x0007 << 8) | 0x01 = 0x0700 | 0x0001 = 0x0701

意思是d1向左位移8位元,再和d2結合。

參考:Combining two uint8_t as uint16_t

 

[C++] 解析JSON (Parse JSON)

JSON(JavaScript Object Notation)是一種輕量級的資料交換語言,以文字為基礎,且易於讓人閱讀。儘管JSON是Javascript的一個子集,但JSON是獨立於語言的文字格式,並且採用了類似於C語言家族的一些習慣。

不過目前C++並無內建函式可以解析JSON (Parse JSON),於是我便到GitHub找輕便好用的套件:JSON for Modern C++

json parse.png

上圖展示套件有四種方式來讀取JSON資料,因為我是要從檔案讀取來解析,所以足夠我使用囉~

(繼續閱讀…)

[C++] 讀取整個檔案為字串 (Read Whole File to String)

先前介紹讀取檔案 (Read File),是以一行一行逐步讀取,現在我們想要一次讀取整個檔案為字串,再來做其它處理,這樣可以怎麼實作呢?

Happy Face JSON.png

這個檔案內容是關於人臉資訊的JSON檔,包含年齡、性別、姿勢、種族、微笑等等量化資訊。

(繼續閱讀…)

[C++] 演算法執行時間 (Algorithm Time of Execution)

演算法感興趣的我,一直想知道自己寫的程式的效能如何,所以這一次特別來瞭解演算法執行時間 (Algorithm Time of Execution)。同一流程可以由不同的演算法來達到同一效果,可是在效能方面或多或少就有差別了~

(繼續閱讀…)

[C/C++] 程式碼換行 (Code Newline)

剛學姊問我程式碼太長的話,要怎麼斷行接下去,才能編譯成功。其實非常簡單,只要在行尾多加「\」這個符號即可!而且不會影響程式執行結果。

直接來看程式碼就瞭解~

廣告
(繼續閱讀…)

標籤雲

%d 位部落客按了讚: