使用MVVM-Sidekick開發Universal App(一)

終于要邁進Universal的大坑了,還有點小激動呢。

CurrencyExchanger 掌中匯率是我前幾年發布在Windows Phone商店中的一個應用,當時是WP7版本,下載鏈接:http://www.windowsphone.com/zh-cn/store/app/%E6%8E%8C%E4%B8%AD%E6%B1%87%E7%8E%87free/84e93a20-cefb-460f-b0d9-a57689b33c10

已經很久沒有升級了,最近想學習一下Universal開發,就拿這個練練手吧。之前一直沒有系統的寫過文章,現在從頭把開發中的一些過程記錄一下,也是對自己的一個促進。因為是邊做邊寫,肯定會有錯誤,請大家不吝賜教。

?

一、新建項目

我使用了MVVM-Sidekick框架,這是一個簡單但功能強大的MVVM框架,由微軟的@韋恩卑鄙 開發,我一直用這個框架開發WP8的程序,前不久作者升級支持了Universal App

新建項目前需要先安裝MVVM-SidekickVS擴展插件,在VS2013update2的工具-擴展與更新菜單中搜索mvvm-sidekick就可以找到這個擴展,下載安裝即可。安裝后會添加項目模板和代碼段,比較方便。

githubhttps://github.com/waynebaby/mvvM-Sidekick

vs插件:http://visualstudiogallery.msdn.microsoft.com/ef9b45cb-8f54-481a-b248-d5ad359ec407

現在可以新建項目了,選擇通用應用程序,MVVM-Sidekick Universal App項目模板,輸入CurrencyExchanger,等待VS建立項目。這個地方有個需要注意,項目名稱不能太長,我第一次輸入了一個比較長的名字,結果VS提示名稱太長,建立失敗了。

?

二、項目結構

現在可以看到VS2013為我們生成了三個項目,

CurrencyExchanger.Windows

CurrencyExchanger.WindowsPhone

CurrencyExchanger.Shared

可以看到我們熟悉的App.xaml文件被放到了Shared項目中,打開看一下,

#if WINDOWS_PHONE_APPprivate TransitionCollection transitions;
#endif

原來有好多條件編譯啊,通過這種方式來區分Win8.1WP8.1,有點坑啊。

在OnLaunched方法中,有這么一行:

//Init MVVM-Sidekick Navigations:
Startups.StartupFunctions.RunAllConfig();

然后我們找到對應的文件看一下,

public static void RunAllConfig(){typeof(StartupFunctions).GetRuntimeMethods().Where(m => m.Name.StartsWith("Config") && m.IsStatic).Select(                      m => m.Invoke(null, Enumerable.Empty<object>().ToArray())).ToArray();}

這個方法對ViewViewModel進行了配置,以后新加View的話,MVVM-Sidekick會自動添加所需的ViewModel,并在這個類中進行注冊,方便使用。

?

ViewModel文件夾中放著所需的VM,這個文件夾也是在Shared項目中,說明我們可以只用共享的VM去作為不同平臺的ViewDataContext,實現了共享代碼的目的。

?

然后看MainPage_Model.cs這個vm,這個類繼承了ViewModelBase<MainPage_Model>ViewModelBaseMVVM-Sidekick的重要的一個類,所有的vm都要繼承這個類。里面有一個屬性Title,可以看到還帶著一大坨代碼,這一大坨代碼是怎么出來的呢,MVVM-Sidekick提供了代碼段來幫助生成,所以這就是安裝VS擴展的好處。

?

通過輸入 propvm ,按Tab,就會自動生成一個屬性,可以方便的綁定到View上了。

?

然后我們看CurrencyExchanger.WindowsPhone項目中的MainPage.xaml,里面有這么一行:

<Page.Resources><!-- TODO: Delete this line if the key AppName is declared in App.xaml --><vm:MainPage_Model x:Key="DesignVM"/></Page.Resources>

定義了一個資源,把VM引入進來。

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"  DataContext="{StaticResource DesignVM}"><TextBlock TextWrapping="Wrap" x:Name="pageTitle" Grid.Column="1"  Text="{Binding Title}" Style="{StaticResource HeaderTextBlockStyle}"/></Grid>

把這個VM作為GridDataContext,這樣就可以進行綁定了,可以看到有一個TextBlockText屬性綁定到了VMTitle字段。

?

大體的項目結構就是這樣,下面我們就開始升級。說是升級,其實就是重新開發啊5555

?

三、建立所需的Model

貨幣轉換這個app功能就是從雅虎財經獲取不同的貨幣代碼直接的匯率,因此首先來建立相應的Model

CurrencyExchanger.Shared項目中新建一個Models文件夾,添加一個CurrencyItem.cs,內容如下:

 public class CurrencyItem : BindableBase<CurrencyItem>{/// <summary>/// 貨幣代碼/// </summary>public string Code{get { return _CodeLocator(this).Value; }set { _CodeLocator(this).SetValueAndTryNotify(value); }}#region Property string Code Setupprotected Property<string> _Code = new Property<string> { LocatorFunc = _CodeLocator };static Func<BindableBase, ValueContainer<string>> _CodeLocator = RegisterContainerLocator<string>("Code", model => model.Initialize("Code", ref model._Code, ref _CodeLocator, _CodeDefaultValueFactory));static Func<string> _CodeDefaultValueFactory = () => { return default(string); };#endregion/// <summary>/// 描述/// </summary>public string Description{get { return _DescriptionLocator(this).Value; }set { _DescriptionLocator(this).SetValueAndTryNotify(value); }}#region Property string Description Setupprotected Property<string> _Description = new Property<string> { LocatorFunc = _DescriptionLocator };static Func<BindableBase, ValueContainer<string>> _DescriptionLocator = RegisterContainerLocator<string>("Description", model => model.Initialize("Description", ref model._Description, ref _DescriptionLocator, _DescriptionDefaultValueFactory));static Func<string> _DescriptionDefaultValueFactory = () => { return default(string); };#endregion/// <summary>/// 圖片名稱/// </summary>public string Image{get { return _ImageLocator(this).Value; }set { _ImageLocator(this).SetValueAndTryNotify(value); }}#region Property string Image Setupprotected Property<string> _Image = new Property<string> { LocatorFunc = _ImageLocator };static Func<BindableBase, ValueContainer<string>> _ImageLocator = RegisterContainerLocator<string>("Image", model => model.Initialize("Image", ref model._Image, ref _ImageLocator, _ImageDefaultValueFactory));static Func<string> _ImageDefaultValueFactory = () => { return default(string); };#endregion}
View Code

這個Model要繼承BindableBase<CurrencyItem>,在MVVM-SidekickBindableBase是和ViewModelBase一樣重要的幾個基類,用于實現可綁定的model,但區別是ViewModelBase中還會放一些Command,而BindableBase顧名思義僅用于綁定屬性,不建議在里面放Command這些東西。不要看上面這么一大坨,其實就輸入了幾個單詞而已,都是用propvm生成的。主要是三個屬性,貨幣代碼,描述,圖片名稱。圖片用于在顯示貨幣的時候顯示一個國旗的圖片。

?

與此類似再建立一個貨幣轉換的model,新建CurrencyExchangeItem.cs文件,代碼如下:

public class CurrencyExchangeItem : BindableBase<CurrencyExchangeItem>{/// <summary>/// 日期/// </summary>public DateTime TradeDate{get { return _TradeDateLocator(this).Value; }set { _TradeDateLocator(this).SetValueAndTryNotify(value); }}#region Property DateTime TradeDate Setupprotected Property<DateTime> _TradeDate = new Property<DateTime> { LocatorFunc = _TradeDateLocator };static Func<BindableBase, ValueContainer<DateTime>> _TradeDateLocator = RegisterContainerLocator<DateTime>("TradeDate", model => model.Initialize("TradeDate", ref model._TradeDate, ref _TradeDateLocator, _TradeDateDefaultValueFactory));static Func<DateTime> _TradeDateDefaultValueFactory = () => { return default(DateTime); };#endregion/// <summary>/// 匯率/// </summary>public double Rate{get { return _RateLocator(this).Value; }set { _RateLocator(this).SetValueAndTryNotify(value); }}#region Property double Rate Setupprotected Property<double> _Rate = new Property<double> { LocatorFunc = _RateLocator };static Func<BindableBase, ValueContainer<double>> _RateLocator = RegisterContainerLocator<double>("Rate", model => model.Initialize("Rate", ref model._Rate, ref _RateLocator, _RateDefaultValueFactory));static Func<double> _RateDefaultValueFactory = () => { return default(double); };#endregion/// <summary>/// 逆向匯率/// </summary>public double InverseRate{get { return _InverseRateLocator(this).Value; }set { _InverseRateLocator(this).SetValueAndTryNotify(value); }}#region Property double InverseRate Setupprotected Property<double> _InverseRate = new Property<double> { LocatorFunc = _InverseRateLocator };static Func<BindableBase, ValueContainer<double>> _InverseRateLocator = RegisterContainerLocator<double>("InverseRate", model => model.Initialize("InverseRate", ref model._InverseRate, ref _InverseRateLocator, _InverseRateDefaultValueFactory));static Func<double> _InverseRateDefaultValueFactory = () => { return default(double); };#endregion/// <summary>/// 是否為基準貨幣/// </summary>public bool IsStandard{get { return _IsStandardLocator(this).Value; }set { _IsStandardLocator(this).SetValueAndTryNotify(value); }}#region Property bool IsStandard Setupprotected Property<bool> _IsStandard = new Property<bool> { LocatorFunc = _IsStandardLocator };static Func<BindableBase, ValueContainer<bool>> _IsStandardLocator = RegisterContainerLocator<bool>("IsStandard", model => model.Initialize("IsStandard", ref model._IsStandard, ref _IsStandardLocator, _IsStandardDefaultValueFactory));static Func<bool> _IsStandardDefaultValueFactory = () => { return default(bool); };#endregion/// <summary>/// 貨幣數量/// </summary>public double Amount{get { return _AmountLocator(this).Value; }set { _AmountLocator(this).SetValueAndTryNotify(value); }}#region Property double Amount Setupprotected Property<double> _Amount = new Property<double> { LocatorFunc = _AmountLocator };static Func<BindableBase, ValueContainer<double>> _AmountLocator = RegisterContainerLocator<double>("Amount", model => model.Initialize("Amount", ref model._Amount, ref _AmountLocator, _AmountDefaultValueFactory));static Func<double> _AmountDefaultValueFactory = () => { return default(double); };#endregion/// <summary>/// 基準貨幣/// </summary>public CurrencyItem CurrencyBase{get { return _CurrencyBaseLocator(this).Value; }set { _CurrencyBaseLocator(this).SetValueAndTryNotify(value); }}#region Property CurrencyItem CurrencyBase Setupprotected Property<CurrencyItem> _CurrencyBase = new Property<CurrencyItem> { LocatorFunc = _CurrencyBaseLocator };static Func<BindableBase, ValueContainer<CurrencyItem>> _CurrencyBaseLocator = RegisterContainerLocator<CurrencyItem>("CurrencyBase", model => model.Initialize("CurrencyBase", ref model._CurrencyBase, ref _CurrencyBaseLocator, _CurrencyBaseDefaultValueFactory));static Func<CurrencyItem> _CurrencyBaseDefaultValueFactory = () => { return default(CurrencyItem); };#endregion/// <summary>/// 目標貨幣/// </summary>public CurrencyItem CurrencyTarget{get { return _CurrencyTargetLocator(this).Value; }set { _CurrencyTargetLocator(this).SetValueAndTryNotify(value); }}#region Property CurrencyItem CurrencyTarget Setupprotected Property<CurrencyItem> _CurrencyTarget = new Property<CurrencyItem> { LocatorFunc = _CurrencyTargetLocator };static Func<BindableBase, ValueContainer<CurrencyItem>> _CurrencyTargetLocator = RegisterContainerLocator<CurrencyItem>("CurrencyTarget", model => model.Initialize("CurrencyTarget", ref model._CurrencyTarget, ref _CurrencyTargetLocator, _CurrencyTargetDefaultValueFactory));static Func<CurrencyItem> _CurrencyTargetDefaultValueFactory = () => { return default(CurrencyItem); };#endregion}
View Code

這個model就是用來顯示貨幣匯率轉換的,里面有兩個貨幣的信息還有匯率的信息等等。

?

四、初始化數據

在用戶第一次進入app時,應該讓用戶選擇要顯示哪些貨幣的匯率,這樣就要給用戶提供一個貨幣列表,這個列表需要我們提前初始化好。

?

新建一個Context類,放一些常用的東東。在Shared項目中新建Utilities目錄,添加一個Context.cs文件,做成單例。

public sealed class Context{static readonly Context instance = new Context();static Context(){}private Context(){}/// <summary>/// Gets the instance./// </summary>/// <value>The instance.</value>public static Context Instance{get{return instance;}}
}
View Code

在里面添加一個列表:

public List<CurrencyItem> AllCurrencyItemList { get; set; }

然后一個初始化方法:

public void Init(){AllCurrencyItemList = new List<CurrencyItem>(){ new CurrencyItem{Code = "AED", Description ="阿聯酋迪拉姆", Image="flag_united_arab_emirates"},
new CurrencyItem{Code = "ALL", Description = "阿爾巴尼亞列克", Image="flag_albania"},
……
}

找到App.xaml.cs,在OnLaunched方法中調用此方法:

//Init Context
Context.Instance.Init();

添加貨幣列表是一個很枯燥的工作,當初我是從雅虎財經網頁上扒下的貨幣代碼,又從網頁素材網站找到國旗的圖片,挨個整理好。當然也可以事先整理成xml來讀取。

慢著,我的WP7程序就是支持多語言的,此時當然不能把貨幣描述直接hard code,而應該從資源文件中按照用戶當前的語言來顯示。

?

好吧又多了一個問題,多語言。

?

五、可以叫全球化多語言本地化……反正就是可以讓用戶選擇語言

以前的WP7多語言需要自己搞一大坨代碼,到了WP8方便了一點,VS會幫助干很多事。但到了Universal,情況又變了。WP8添加資源文件的時候資源文件格式為resx,同時程序會自動添加一個AppResouces.Designer.cs,通過一個全局的ResourceManager去取得資源文件中的字符串,代碼中可以直接調用:

String appName = AppResources.AppName;

是不是很方便?

到了Universal里,自動生成的沒有了,添加的資源文件格式變成了resw,需要用這種方式來調用:

var loader = new Windows.ApplicationModel.Resources.ResourceLoader();
var string = loader.GetString('Farewell');

是不是很坑?萬一字符串寫錯了就找不到了。

添加多語言文件倒不麻煩,有多語言工具包,鏈接:http://msdn.microsoft.com/zh-cn/library/windows/apps/xaml/jj572370.aspx

但是調用顯得不太友好。所以我仿照WP8的方式新建了一個AppResources.cs,放到Utilities,里面這樣寫:

public static class AppResources{public static ResourceLoader CurrentResourceLoader{get{return ResourceLoader.GetForCurrentView();}}public static string AppName{get{return CurrentResourceLoader.GetString("AppName");}}
。。。。。。
}

只要保證這里寫對,這樣以后調用的時候就不怕出錯了。

多語言資源文件的添加比較簡單,有工具包協助,甚至翻譯都可以幫你做好,具體步驟見

http://msdn.microsoft.com/zh-cn/library/windows/apps/xaml/jj572370.aspx

?

需要注意的是,以前的方式需要我們為每種語言建立一個資源文件,現在有多語言工具包就不需要了,只添加一個默認語言的即可,工具包會自動填充其他的語言。比如CurrencyExchanger默認語言是英語,那么步驟就是:

打開Package.appxmanifest文件,把默認語言改成en-US,然后添加一個Strings文件夾,下面添加en-US文件夾,添加一個Resources.resw資源文件,在這里面編輯所需要的字符串。

右鍵單擊CurrencyExchanger.WindowsPhone,選擇添加翻譯語言,

這樣會自動建立一個MultilingualResources文件夾,里面是一大坨xlf后綴的文件,qps-ploc.xlf這個是偽語言,用于測試的,在其他的幾個文件上點右鍵,選擇打開方式,選擇多語言編輯器,出來這么一個東東:

看到菜單沒有,點翻譯,Microsoft Translator直接就幫你翻譯好了。當然還需要進一步校對,但已經很智能化了。這樣就不需要為每種語言建資源文件了,可以從這些xlf文件里找。需要注意的是,如果你的程序選擇了zh-CN的默認語言,就不能再有zh-CN.xlf的多語言資源,否則會提示錯誤,刪掉重復的即可。你也可以在xlf文件上右鍵發送郵件給朋友,翻譯完了再導入進來。

?

呼呼,先別管翻譯的準不準,代碼里我們可以這樣初始化貨幣列表了:

AllCurrencyItemList = new List<CurrencyItem>(){ new CurrencyItem{Code = "AED", Description = AppResources.AED, Image="flag_united_arab_emirates"},
new CurrencyItem{Code = "ALL", Description = AppResources.ALL, Image="flag_albania"},
//new CurrencyItem{Code = "ANG", Description = AppResources.ANG, Image=""},
new CurrencyItem{Code = "ARS", Description = AppResources.ARS, Image="flag_argentina"},
。。。。。
}

因為是從資源文件中讀取的貨幣描述,所以在UI會顯示和用戶系統匹配的語言。

未完待續。

轉載于:https://www.cnblogs.com/yanxiaodi/p/3800767.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375782.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375782.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375782.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

NewCode----給定兩個數R和n,輸出R的n次方

參考鏈接 輸入描述: 多組測試用例&#xff0c;請參考例題的輸入處理 輸入每行一個浮點數 R 其中0.0 < R <99.999&#xff0c; 一個整數 n 其中0 < n <25 輸出描述: 輸出R的n次方 輸入例子1: 95.123 12 0.1 1 輸出例子1: 548815620517731830194541.89902534…

如何檢測本計算機耗電量,如何查看電腦耗電量?魯大師查看電腦使用功率的方法...

【www.xinr41319.cn--電腦網絡】查看自己電腦的電源功率有兩大好處&#xff0c;第一知道給臺式電腦配置多大的電源&#xff0c;第二可以精確的算出&#xff0c;一臺電腦&#xff0c;一天一般消耗多少電&#xff0c;那么小編教大家來查看一下自己電腦的功率是多少。我們可以要借…

【轉載】COM小結

原文&#xff1a;http://blog.csdn.net/byxdaz/article/details/6595210 一、Com概念 所謂COM&#xff08;Componet Object Model&#xff0c;組件對象模型&#xff09;&#xff0c;是一種說明如何建立可動態互變組件的規范&#xff0c;此規范提供了為保證能夠互操作&#xff0…

解決Dropbox無法連接的問題

同步共享服務Dropbox從6月18日開始再次遭到封鎖&#xff0c;原因是DNS污染。Dropbox上次在2010年5月曾遭到IP封鎖和網址關鍵字過 濾&#xff0c;2012年5月除文件外鏈功能外其它功能可正常訪問&#xff1b;2014年2月全部功能都可以正常訪問。中國正展開凈網行動&#xff0c;文件…

求任意數的階乘

這是筆試的第二題&#xff0c;求任意數的階乘其實實質也就是大數相乘&#xff0c;很可惜沒有在規定時間內完成這道題&#xff0c;估計這次筆試涼涼。 #include<iostream> using namespace std;int result[200] { 0 }; int N; void fun(int n) {int temp;int i;int carr…

RDLC報表系列一

1、報表項目搭建&#xff1a; 配置好后&#xff0c;單擊Web服務URL:http://lg-20151517ryre/ReportServer 如果電腦系統打開的時候沒有設置密碼的話&#xff0c;此時打開有可能會出現需要登錄名和密碼。如出現此種情況可給Administrator設置密碼。然后刷新當前頁面就可以看大上…

.net 服務器自動執行,自動檢測服務器使用流量并執行命令腳本

#codingutf-8limit_total0# limit_total 上傳下載的流量限制&#xff0c;單位GB&#xff0c;如果不限制就是0&#xff0c;如果限制1T就是1024limit_in0# limit_in 下載的流量限制&#xff0c;單位GB&#xff0c;如果不限制就是0&#xff0c;如果限制1T就是1024limit_out0# limi…

Android APK是否需要預解壓

今天在逛論壇的時候&#xff0c;發現有一個朋友問的問題。其主要目的&#xff0c;是想實現 玩家首次進入游戲的時候&#xff0c;或者新安裝了版本的時候&#xff0c;對APK進行解壓&#xff0c;寫入SD卡。這樣游戲運行過程中&#xff0c;將不會再從APK中讀取資源。 以提高效率。…

C++開發秋招筆試題

第一題&#xff1a; 記得不太清了&#xff0c;湊合看吧&#xff01; 輸入&#xff1a; 第一行&#xff1a;T 表示有T個測試用例 以下N行&#xff1a; 輸入的T個測試用例 測試用例&#xff1a; 每個輸入包含四個輸入&#xff0c;a&#xff0c;b&#xff0c;c&#xff…

ADS-B顯示終端5.9

更改日志 1 更新背景地圖。增加了全國范圍內的VOR電臺、DME、NDB導航臺信息&#xff0c;包含有坐標信息、代碼信息、頻率等內容。 VOR電臺、DME、NDB導航臺信息來自中國民航局公布的航行情況資料匯編。VOR、DME、NDB分別採用不同的圖形繪制&#xff0c;目標均採用淡綠色畫筆…

域名自動跳轉不搭建服務器,寶塔搭建的服務器WEB系統環境如果做域名301跳轉

寶塔搭建的服務器WEB系統環境如果做域名301跳轉今天老蔣遇到一個網友&#xff0c;服務器WEB系統環境是用寶塔搭建的&#xff0c;搭建的網站綁定過WWW域名和不帶WWW域名&#xff0c;他是希望能全部統一到WWW的域名&#xff0c;這里應該是他程序沒有自帶301跳轉&#xff0c;如果是…

求兩個字符串的最長公共子串

給出兩個字符串&#xff0c;求出兩個字符串的最長公共子串 #include<iostream> #include<string> using namespace std; int main() {string a, b;while (cin >> a >> b){if (a.size() > b.size())swap(a, b);string str_m;//存儲最長公共子串for …

修改模型的原點

Mesh mesh 坦克.GetComponent<MeshFilter>().mesh; Vector3[] vertices mesh.vertices;foreach(vertices v in vertices ) {v new Vector3(要移動的距離)}mesh.vertices vertices; mesh.RecalculateBounds();轉載于:https://www.cnblogs.com/mukeyang/p/4633085.html…

OpenCV Python教程(1、圖像的載入、顯示和保存)

本文是OpenCV 2 Computer Vision Application Programming Cookbook讀書筆記的第一篇。在筆記中將以Python語言改寫每章的代碼。 PythonOpenCV的配置這里就不介紹了。 注意&#xff0c;現在OpenCV for Python就是通過NumPy進行綁定的。所以在使用時必須掌握一些NumPy的相關知識…

大華出入口管理系統H710服務器配置,DH-DSS-H710S2 大華出入口綜合管理系統 停車場收費 支持人臉相機設備添加...

DH-DSS-H710S2 大華出入口綜合管理系統 支持車輛列表展示&#xff0c;包括車輛編號、車牌、車場、車輛品牌、車輛類型、車身顏色、車主等信息 支持通過人員編號、姓名進行人員信息查詢 支持打印小票與導出繳費信息 DH-DSS-H710S2DH-DSS-H710S2大華出入口綜合管理系統DH-DSS-H71…

微軟塊級備份引擎服務器,文件級與塊級備份區別

首先我們先來了解一下&#xff0c;什么叫做塊級&#xff1f;什么叫文件級&#xff1f;1.塊級概念&#xff1a;塊級是指以扇區為基礎&#xff0c;一個或我連續的扇區組成一個塊&#xff0c;也叫物理塊。它是在文件系統與塊設備(例如&#xff1a;磁盤驅動器)之間。2.文件級概念&a…

通過物理映射往虛擬機中傳輸數據

1、在虛擬機管理界面&#xff0c;找到硬盤&#xff0c;雙擊 2、在跳出的頁面中點擊“映射” 3、在彈出的頁面中將“以只讀模式打開文件”選項勾去 4、選擇是“”是 5、這個時候就看到電腦上出現了一個“Z盤”&#xff0c;此時就可以將需要復制進虛擬機的文件&#xff0c;復制…

Ubuntu12.04版本安裝arm-linux-gcc 4.3.3

由于Ubuntu12.04是64位系統,如果安裝4.3.3版本的arm gcc,系統將會找到,所以要讓其可用,就要安裝ia32-lib包,以便讓系統使用32bit軟件: apt-get install ia32-libs 由于我前面已將安裝好了gcc 4.3.3并且設置好了環境變量,所以安裝完上面以后就可以查看gcc信息了: arm-linux-gcc …

[Algorithm] 字符串匹配算法——KMP算法

1 字符串匹配 字符串匹配是計算機的基本任務之一。 字符串匹配是什么&#xff1f;舉例來說&#xff0c;有一個字符串"BBC ABCDAB ABCDABCDABDE"&#xff0c;我想知道&#xff0c;里面是否包含另一個字符串"ABCDABD"&#xff1f; 許多算法可以完成這個任務&…

入門Git

本文是我在[實驗樓]這個平臺學習git時的第一篇學習筆記&#xff0c;現貼出來以饗大家&#xff01; git學習 1、git的配置 git的配置主要通過git config --global <配置名稱> <配置的值>來對git進行配置 其中最常用的配置為&#xff1a; git config --global u…