unsigned char型別指標與int型資料的轉換
前兩天寫了個程式,在PC上單元測試一切正常,但是載入到嵌入式系統中執行,執行的結果總是不正確,糾察了很久,發現問題出現在如下程式碼:
unsigned int type; unsigned char *pType; type = 2; pType = (unsigned char *)&type; |
在PC機上,上述程式碼執行後,type=2, *pType=2,而在嵌入式系統中執行,得到的值卻是type=2, *pType=0。
經過查閱資料才發現,原來這次使用的嵌入式系統資料儲存是大端結構,低地址存放的是高位資料,上述資料的儲存形式如下:
指標pType指向的是type變數的第一個位元組所在的地址,實際上該位元組儲存的資料是type變數的最高位元組的值。
在PC機上,資料儲存是小端模式,低地址存放的是低位資料,上述資料的儲存形式如下:
指標pType指向的資料正好就是type變數最低位位元組的資料。
因此,編寫嵌入式系統的程式碼,如果想要考慮到通用性,則應當儘量避免使用上述的指標用法來訪問int型別資料的每個位元組的值,而是應該使用int型別資料進行左移、右移等操作得到相應位元組的值,這樣不管是大端還是小端儲存,都不會有問題。
相關推薦
unsigned char型別指標與int型資料的轉換
前兩天寫了個程式,在PC上單元測試一切正常,但是載入到嵌入式系統中執行,執行的結果總是不正確,糾察了很久,發現問題出現在如下程式碼: unsigned int type; unsigned char *pType; type = 2; pType = (unsigned
指標、字串與整型資料型別的轉換
再也不用小心翼翼的實驗各種資料型別轉換的API看看是否能達到自己想要的效果。只需強制型別轉換與位運算結合,各種資料型別轉換就能很輕鬆的實現。 拋磚引玉一下。 #include "Windows.h" /////////////////////////////////////
【C語言】實現對一個8bit資料(unsigned char 型別)的指定位(例如第n位)的置0或者置1操作,並保持其他位不變
請編碼實現以下功能的函式 功能:實現對一個8bit資料(unsigned char 型別)的指定位(例如第n位)的置0或者置1操作,並保持其他位不變。 函式原型:void bit_set(unsigned char *p_data,unsigned char position,int flag)
int型資料型別為什麼取值範圍是-2^31~2^31-1
正數在計算機中表示為原碼,最高位為符號位: 1的原碼為0000 0000 0000 0000 0000 0000 0000 0001 2147483647的原碼為0111 1111 1111 1111 1111 1111 1111 1111 所以最大的正整數是21474
【C語言】實現對一個8bit資料(unsigned char)型別的指定位的置0或置1操作,並保持其他位不變
功能:實現對一個8bit資料(unsigned char)型別的指定位(例如第n位)的置0或置1操作,並保持其他位不變。 函式原型:void bit_set(unsigned char *p_data
關於float型資料與int型,位元組陣列的轉化
java中float與int轉化有int i = Float.floatToIntBits(v);及相反函式,相當方便; 下面介紹的是C++中 c++ float int 按位互轉 inline float int32_bitcast_float32(int temp){r
【c語言】實現對一個8bit資料(unsigned char 型別)的指定位(例如第n位)置0或者置1操作,並保持其他位不變
// 實現對一個8bit資料(unsigned char 型別)的指定位(例如第n位)置0或者置1操作,並保持其他位不變 #include <stdio.h> void bit_set(unsigned char *p_data, unsigned char
char與int型的相互轉換
1、int 轉換成char: int n = 1; char ch = (char)(n + '0'); 這樣打印出來ch的值為1; 不
C語言中printf用%d輸出float型別資料,或以%f輸出int型資料的結果
1.測試程式及結果 程式#include"stdio.h" int main() { float a = 7.5, b = 1.23, c = 1.24, d = 1.25; double a1 = 7.5, b1 = 1.23, c1 = 1.24, d1 = 1.
String轉換char數組和int型和Double型
pri public integer static args pac char數組 out parseint package z; public class z { public static void main(String[] args) { String s = "
原始碼分析所得 char 與 int之間的轉換
公司用的是 hibernate 做資料庫查詢,其中 jar 包是這些。 在翻閱原始碼的時候有些問題不得解。在不懈努力下,以及前輩大神的指導下終於明白了。 String biz_stage = "007"; StringBuilder sql1 = new StringBuil
nodejs十六進位制字串與btye型資料相互轉換
byte型轉換十六進位制字串 /** * byte型轉換十六進位制 * @param b * @returns {string} * @constructor */ const Bytes2HexString = (b)=> { let hexs = ""; fo
陣列轉集合、集合轉陣列、字串陣列與int型、long型陣列等的轉換
在專案中經常會遇到陣列轉集合、集合轉陣列、陣列之間型別轉換等操作 1.陣列轉集合 為了實現把一個數組轉換成一個ArrayList,很多Java程式設計師會使用如下的程式碼: String str[] = {"1","2","3"}; List&
void * 無型別指標(泛型指標)
void * 無型別指標(泛型指標) 只要你是指標就可以賦值給我例如 void *vp; void main() { char ch; int n; double x; vp = &ch; vp = &n; vp = *x; } 但是無型別指標不能做
如何取得指定的int型資料中某一位的二進位制值(1還是0)
public static void main(String[] args) { int num = 19; String binaryString = In
Java 位元組陣列型別(byte[])與int型別互轉
程式碼如下: public class CommonUtils { //高位在前,低位在後 public static byte[] int2bytes(int num){ byte[] result = new b
離散型與連續型資料決策樹構建及列印實現 R語言,ID3,C4.5演算法
本人的第一篇文章,趁著我們的資料探勘課設的時間,把實現的決策樹程式碼,拿出來分享下。有很多漏洞和缺陷,還有很多駭客思想的成分,但是總之,能實現,看網上的程式碼,能用的其實也沒幾個。廢話不多說,直接看程式碼 特別鳴謝博主skyonefly的程式碼 附上鍊接:R
第八週專案一の任務三----擴充套件功能,使之能與double型資料進行運算
/* * 程式的版權和版本宣告部分 * Copyright (c)2013, 煙臺大學計算機學院學生 * All rightsreserved. * 檔名稱: object.cpp * 作者:趙曉晨 * 完成日期: 2013年04月18日 * 版本號: v1.0 * 輸入描
原碼,反碼與補碼,signed,unsigned char的儲存與大小
原碼: 如果機器字長為N個bit,那麼一個數的原碼就是N位二進位制數,最高位 是符號位,1代表負數,0代表正數。 反碼: 正數的反碼就是原碼,負數的反碼就是符號位不變,其他取反。 補碼: 正數的
關於int型資料的溢位
main(){ int a = 32767; int b = -32768; printf("a=%d;/nb=%d;/n",++a,--b);}以上程式碼在Turbo C中執行結果如下:a=-32768;b=32767;使用windows的CL或者gcc結果如下:a=327