Just My Life & My Work

Archive for the ‘C&C++’ Category

[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)

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

直接來看程式碼就瞭解~

廣告
(繼續閱讀…)

[C++] 讀取檔案 (Read File)

現在人工輸入的方式已經落伍,在今日海量資料之下,我們想要迅速分析資料,第一個關鍵步驟就是讀取檔案 (Read File)。恰好我遇到需要讀檔,才發現之前沒有寫在部落格中,以致我還要去翻過去寫的code,才想起原來讀檔那麼簡單!

讀檔其實有幾種方法,在這裡我用一次讀取一行的技巧來讀取檔案裡的資料。我準備一個檔案叫做:HappyMan.txt,裡頭有這些字元~

廣告
(繼續閱讀…)

[C&C++] 計算記憶體使用狀況 (Compute the Usability of Memory)

有時候我們想知道目前我們記憶體的使用狀況,那要怎麼做才能獲取記憶體當前的資料?這裡有一個方法,使用MS Visual C++中提供的函式,即可獲得實體記憶體虛擬記憶體的當前使用資訊唷!

(繼續閱讀…)

[C&C++] 浮點數精準度 (Floating-Point Precision)

很多程式設計師都會有浮點數精準度 (Floating-Point Precision)的問題,但常常只知道double的精準度大於float,卻不知道double精準度多少,也不知道float精準度多少,反正就用精準度最大的double就好。但其實原理很簡單,計算機概論中就有提到IEEE 754對浮點數的規範,只要稍微瞭解一下其定義即可。

(繼續閱讀…)

[C&C++] 前處理器—引入檔案 (#include “")

記得初學者很常問我#include兩個格式有何不同,雙引號「"xxx"」小於大於「<xxx>」所代表的功能有何差別,剛開始寫程式的時候,我們都只會使用小於大於「<xxx>」格式,這樣也就足夠讓我們引入C語言已提供的程式內容,當我們成為進接程式設計師,便開始要會使用雙引號「"xxx"」格式了!

(繼續閱讀…)

[C/C++] 換底公式使用log2

在資訊領域很常會用到以2為底數的log2,但是C/C++並沒有直接提供log2的函式,不過卻可以很簡單地以換底公式使用log()函式來達成log2的功用。

(繼續閱讀…)

標籤雲