青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++ Coder

HCP高性能計算架構(gòu),實現(xiàn),編譯器指令優(yōu)化,算法優(yōu)化, LLVM CLANG OpenCL CUDA OpenACC C++AMP OpenMP MPI

C++博客 首頁 新隨筆 聯(lián)系 聚合 管理
  98 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

#

http://blog.csdn.net/liuyuze/article/details/2865118

 Linux下有很多壓縮工具,7z是已知最大壓縮比的工具,它的使用比較復(fù)雜,以下我記下的一些技巧

 

壓縮命令(結(jié)合tar命令): tar cf - /home/test | 7z a -si test.tar.7z

                 上面命令將 /home/test 文件夾壓縮為 test.tar.7z 文件

解壓命令(結(jié)合tar命令)  :   7z x -so test.tar.7z | tar xf - /home/alex

                                                    這個命令將test.tar.7z 的內(nèi)容解壓到 /home/alex目錄下

 

根據(jù)不同需要,還可以設(shè)置不同壓縮比 ,這個命令特別適合做RAMDISK時候使用,大大節(jié)省寶貴的空間,希望對各位有幫助!

 

下面是壓縮參數(shù)設(shè)置,引用地址:http://anywolfs.com/liuhui/7-zip/cmdline/switches/method.htm

原文如下

-m (設(shè)置壓縮算法) 選項

指定壓縮算法。

語法

-m<method_parameters>

此選項的格式依壓縮檔案的類型而定。

Zip

參數(shù) 默認值 說明
x=[0 | 5 | 9 ] 5 設(shè)置壓縮等級。
m={MethodID} Deflate 設(shè)置壓縮算法:Copy、Deflate、Deflate64、BZip2。
fb={NumFastBytes} 32 設(shè)置 Deflate 編碼器的單詞大小。
pass={NumPasses} 1 設(shè)置 Deflate 編碼器的傳送大小。

 

x=[0 | 5 | 9 ]

設(shè)置壓縮等級

壓縮等級 說明
0 不壓縮。
5 默認的壓縮等級。
9 最大壓縮等級。壓縮后的文件會更小。但是在壓縮的時候會比較慢而且需要較多的物理內(nèi)存。
fb={NumFastBytes}

設(shè)置 Deflate 編碼器的單詞大小。您可以在 3 到 255 范圍之內(nèi)更改。在 Deflate 算法下,它的默認值是 32;在 Deflate 64 算法下,它的默認值是 64。如果要壓縮的多個文件中,有很多排列相同的字節(jié),比如說內(nèi)容及格式極為相同的兩個純文本文檔,那么在壓縮的時候如果有較大的單詞大小,將會在一定程度上提高壓縮比。所以,通常情況下,其數(shù)量越大,壓縮后的文件就會越小。但是在壓縮和解壓縮的時候會比較慢而且需要較多的物理內(nèi)存。

pass={NumPasses}

設(shè)置 Deflate 編碼器的傳送大小。您可以在 1 到 4 范圍之內(nèi)更改。在 Deflate 算法下,它的默認值是 1;在 Deflate 64 算法下,它的默認值是 3。此項可略微提升壓縮比,但并不明顯。

GZip

除了 GZip 不支持“儲存”壓縮算法之外,GZip 和 Zip 一樣使用著相同的參數(shù)。

7z

參數(shù) 默認 說明
x=[0 | 1 | 5 | 7 | 9 ] 5 設(shè)置壓縮等級。
s=[off | on | [e] [{N}f] [{N}b | {N}k | {N}m | {N}g] on 設(shè)置固實模式。
f=[off | on] on 開啟或關(guān)閉可執(zhí)行文件壓縮過濾器。
hc=[off | on] on 開啟或關(guān)閉檔案文件頭壓縮。
hcf=[off | on] on 開啟或關(guān)閉檔案文件頭完全壓縮。
he=[off | on] off 開啟或關(guān)閉檔案文件頭加密。
b{C1}[s{S1}]:{C2}[s{S2}] 設(shè)置編碼器之間綁定。
{N}={MethodID}[:param1][:param2][..] LZMA 設(shè)置壓縮算法:LZMA、PPMd、BZip2、Deflate、BCJ、BCJ2、Copy。
mt=[off | on] off 設(shè)置多線程模式。

 

x=[0 | 1 | 5 | 7 | 9 ]

設(shè)置壓縮等級

壓縮等級 說明
0 不壓縮.
1 快速壓縮:LZMA 快速算法、32KB 字典大小、HC3 Match finder、BCJ 過濾器。
5 正常壓縮:LZMA 標準算法、2 MB 字典大小、BT4 Match finder、單詞大小為 32、BCJ 過濾器。
7 最大壓縮:LZMA 最大算法、8 MB 字典大小、BT4 Match finder、單詞大小為 64、BCJ 過濾器。
9 極限壓縮:LZMA 最大算法、32 MB 字典大小、BT4b Match finder、單詞大小為 64、BCJ2 過濾器。
s=[off | on | [e] [{N}f] [{N}b | {N}k | {N}m | {N}g)]

開啟或關(guān)閉固實模式。此選項的默認值是 s=on。開啟或關(guān)閉固實壓縮檔案模式。在創(chuàng)建固實壓縮檔案模式中,它把壓縮檔案中的所有文件都當成一個連續(xù)數(shù)據(jù)流來看待。通常情況下,固實壓縮可增加壓縮比,特別是在添加大量小文件的時候。

e 為每一種文件擴展名使用單獨的固實數(shù)據(jù)流
{N}f 設(shè)置在一個固實數(shù)據(jù)流種文件的個數(shù)
{N}b | {N}k | {N}m | {N}g 設(shè)置固實數(shù)據(jù)流的大小(字節(jié))

不同的壓縮等級對固實數(shù)據(jù)流大小的限制:

壓縮等級 大小
儲存 0 B
快速 16 MB
正常 256 MB
最大 1 GB
極限 4 GB

對固實數(shù)據(jù)流大小的限制雖然能應(yīng)響到壓縮比,但是它還是有相當多的優(yōu)勢:

  • 萬一壓縮檔案損壞,并不會丟失所有數(shù)據(jù)。
  • 減少了文件的釋放時間。

在當前的版本中,您只能更新在壓縮時未選擇“創(chuàng)建固實壓縮檔案”的壓縮檔案。也就是說當前版本不支持固實壓縮檔案的更新。

示例:

        -s=100f10m

設(shè)置固實模式使每個固實數(shù)據(jù)流種最多 100 文件,并且最大 10 MB 。

f=[off | on]

開啟或關(guān)閉可執(zhí)行文件壓縮過濾器:dll、exe、ocx、sfx、sys。它用于 BCJ2 過濾器(使用極限壓縮)及 BCJ 過濾器中。此選項的默認值是 f=on.

hc=[off | on]

開啟或關(guān)閉檔案文件頭壓縮。此選項的默認值是 hc=on。如果開啟檔案文件頭壓縮,一部分檔案的文件頭將使用 LZMA 算法進行壓縮。

hcf=[off | on]

開啟或關(guān)閉檔案文件頭完全壓縮。此選項的默認值是 hcf=on。如果開啟檔案文件頭完全壓縮,那么此壓縮檔案只有 7-Zip 2.30 beta 25 及更高的版本才能支持。

he=[off | on]

開啟或關(guān)閉檔案文件頭加密。此選項的默認值是 he=off。

{N}

設(shè)置算法的順序。它也可以用算法關(guān)聯(lián)參數(shù)。最小值為 0。含有從號的算法將被首先使用。

b{C1}[s{S1}]:{C2}[s{S2}]

將輸出流 S1 及編碼器 C2 中的輸入流 S2 與編碼器 C1 綁定。如果未指定流的大小,那么大小將為 0。

通常情況下,編碼器有一個輸入流及一個輸出流。而在 7z 中,一些編碼器有多個輸入及輸出流。

舉個例子,BCJ2 編碼器有有關(guān)輸入流及四個輸出流。

mt=[off | on]

開啟或關(guān)閉多線程壓縮模式。在多線程支持模式中,7-Zip 將使用兩個線程來進行壓縮。這樣的話,對于多處理器系統(tǒng),那么壓縮速度將提升 70-80%。對于 Pentium 4 超線程處理器,壓縮速度將提升 25% 左右。但解壓縮時只使用單獨線程。注意!此選項僅對 LZMA 壓縮算法有效。

{N}={MethodID}[:param1][:param2] ... [:paramN]

設(shè)置壓縮算法。在 7z 格式中,您可以使用許多壓縮算法。此選項的默認算法是 LZMA。

此參數(shù)必須是下列格式中的任意一種:

  • {ParamName}={ParamValue}。
  • {ParamName}{ParamValue},{ParamValue} 是一個數(shù)值,并且 {ParamName} 中不包含數(shù)字。

支持的壓縮算法:

MethodID 說明
LZMA 基于 LZ 之上的壓縮算法。
PPMd 基于 Dmitry Shkarin 之上的算法 PPMdH 并加以優(yōu)化。通常能對純文本提供高壓縮比及較快的解壓縮速度。
BZip2 基于 BWT 的標準壓縮算法。通常能對純文本提供較高壓縮比及相當不錯的解壓縮速度。
Deflate ZIP 及 GZip 格式的標準壓縮算法。沒有很高的壓縮比。但是它擁有十分快的壓縮及解壓縮速度。Deflate 壓縮算法只支持 32 KB 字典大小。
BCJ (CALL、JUMP)32 位 x86 可執(zhí)行文件轉(zhuǎn)換器。
BCJ2 (CALL、JUMP、JCC)32 位 x86 可執(zhí)行文件轉(zhuǎn)換器(第二版)。
Copy 不壓縮。

LZMA

LZMA 是基于 Lempel-Ziv(由以色列數(shù)學家 A.Lempel 和 J.Ziv 共同開發(fā)的壓縮算法)之上的壓縮算法。它能提供相當快的解壓縮速度(約比壓縮快 10 到 20 倍)。對內(nèi)存的需求也不盡相同(詳細信息請參見 d={Size}[b|k|m] 選項)。

參數(shù) 默認值 說明
a=[0|1|2] 1 設(shè)置壓縮等級
d={Size}[b|k|m] 20 設(shè)置字典大小
mf={MF_ID} bt4 設(shè)置匹配器
fb={N} 32 設(shè)置緊縮字節(jié)數(shù)量
lc={N} 3 設(shè)置 Literal Context 塊數(shù) - [0, 8]
lp={N} 0 設(shè)置 Literal Pos 塊數(shù) - [0, 4]
pb={N} 2 設(shè)置 Pos 塊數(shù) - [0, 4]
a=[0|1|2]

設(shè)置壓縮等級:0=快速、1=正常、2=最大壓縮。默認值為 1。

d={Size}[b|k|m]

設(shè)置 LZMA 壓縮算法的字典大小。您可以使用字節(jié)、KB 或 MB 來指定此項。字典大小的最大值為 256 MB=2^28 字節(jié)。正常模式下,LZMA 的字典大小默認值為 21(2 MB) ;最大模式(-mx=7)下為 23(8 MB);極限模式(-mx=9)下為 25(32 MB)。如果您未指定 [b|k|m] 項,字典大小將自動根據(jù)壓縮等級來選擇相應(yīng)的單位。對于 LZMA 算法的文件解壓縮,若壓縮文件的字典大小為 64 MB,則解壓縮時就需要 64 兆可用的物理內(nèi)存。

mf={MF_ID}

設(shè)置 LZMA 壓縮算法的匹配器。默認算法為 bt4。bt* 類的算法所需的內(nèi)存比 pat* 類所需的內(nèi)存少。通常情況下 bt4 的工作速度比 pat* 快得多,然而部分文件格式在 pat* 算法中可以工作得很快。hc* 類算法并沒有很好得壓縮比,但是它與快速模式(a=0)結(jié)合使用通常會工作得相當快。所需內(nèi)存依字典大小而定(參見下表)。

MF_ID 所需內(nèi)存 說明
bt2 d×9.5 + 1 MB 二進制樹;2 散列字節(jié)。
bt3 d×9.5 + 65 MB 二進制樹;2-3(完整) 散列字節(jié)。
bt4 d×9.5 + 6 MB 二進制樹;2-3-4 散列字節(jié)。
bt4b d×9.5 + 34 MB 二進制樹;2-3-4(大) 散列字節(jié)。
pat2r d×26 + 1 MB Patricia 樹;2-位節(jié)點;可移動。
pat2 d×38 + 1 MB Patricia 樹;2-位節(jié)點。
pat2h d×38 + 77 MB Patricia 樹;2-位節(jié)點;2-3 散列字節(jié)。
pat3h d×62 + 85 MB Patricia 樹;3-位節(jié)點;2-3 散列字節(jié)。
pat4h d×110 + 101 MB Patricia 樹;4-位節(jié)點;2-3 散列字節(jié)。
hc3 d×5.5 + 1 MB Hash Chain;-3 散列字節(jié)。
hc4 d×5.5 + 6 MB Hash Chain;2-3-4 散列字節(jié)。

注意:操作系統(tǒng)同樣需要一部分物理內(nèi)存來維持系統(tǒng)得正常運行。所以至少要剩余 32 可用物理內(nèi)存。

fb={N}

設(shè)置 LZMA 壓縮算法的緊縮字節(jié)。有效范圍從 5 到 255。正常模式下默認值為 32;最大模式下為 64 。通常情況下,較大的數(shù)值能略微提高壓縮比。但同時也會降低壓縮速度。

lc={N}

設(shè)置 Literal Context 位數(shù)。有效范圍從 0 到 8。默認值為 3。有時壓縮檔案中含有大文件會自動使用 lc=4。

lp={N}

設(shè)置 Literal Pos 位數(shù)。有效范圍從 0 到 4。默認值為 0。

pb={N}

設(shè)置 Pos 位數(shù)。有效范圍從 0 到 4。默認值為 2。

PPMd

PPMd 是 PPM-based 壓縮算法的簡寫。它基于 Dmitry Shkarin 的算法 PPMdH 并對其源代碼加以優(yōu)化。PPMd 通常能對純文本提供高壓縮比及較快的解壓縮速度。壓縮和解壓縮的速度完全相同,所需的內(nèi)存大小也一樣。

參數(shù) 默認值 說明
mem={Size}[b|k|m] 24 設(shè)置 PPMd 算法使用內(nèi)存。
o={Size} 6 設(shè)置 PPMd 算法壓縮命令。
mem={Size}[b|k|m]

設(shè)置 PPMd 算法使用的內(nèi)存多少。您可以使用字節(jié)、KB 或 MB 來指定此項。最大值為 2 GB=2^31 字節(jié);默認值為 24(16MB)。如果您未指定 [b|k|m] 項,字典大小將自動根據(jù)壓縮等級來選擇相應(yīng)的單位。PPMd 在壓縮和解壓縮時所需的內(nèi)存大小是相同的。

o={Size}

設(shè)置 PPMd 算法壓縮命令。其大小必須在 [2,32] 范圍內(nèi)。默認值為 6。

BCJ2

BCJ2 是 32 位 x86 可執(zhí)行文件轉(zhuǎn)換器(第二版)。它通過轉(zhuǎn)換分支指令來對文件進行進一步壓縮。

BCJ2 編碼器有一個輸入流和四個輸出流:

  • s0:干流。提供進一步的壓縮。
  • s1:CALL 值轉(zhuǎn)換流。提供進一步的壓縮。
  • s2:JUMP 值轉(zhuǎn)換流。提供進一步的壓縮。
  • s3:服務(wù)流。它已經(jīng)備壓縮過。

如果使用 LZMA 壓縮算法,s1 及 s2 流的字典大小將會比 s0 流的小(512 KB)。

示例

7z a -tzip archive.zip *.jpg -m0

不壓縮而直接將 *.jpg 文件添加到 archive.zip 檔案。

7z a -t7z archive.7z *.exe *.dll -m0=BCJ -m1=LZMA:d=21 -ms -mmt

添加 *.exe*.dll 文件到固實壓縮檔案 archive.7z。使用 LZMA 壓縮算法、2 MB 字典大小及 BCJ 轉(zhuǎn)換器。壓縮將開啟多線程優(yōu)化(如果可用)。

7z a -t7z archive.7z *.exe *.dll -m0=BCJ2 -m1=LZMA:d23 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3

添加 *.exe*.dll 文件到壓縮檔案 archive.7z。使用 LZMA 壓縮算法、BCJ2 轉(zhuǎn)換器、為主輸出流(s0)使用 8 MB 字典大小、LZMA 算法為 BCJ2 轉(zhuǎn)換器的 s1 及 s2 輸出流使用 512 KB 字典大小。

7z a -t7z archive.7z *.txt -m0=PPMd

添加 *.txt 文件到壓縮檔案 archive.7z。 使用 PPMd 壓縮算法。

可以和此選項結(jié)合使用的命令

a (添加)d (刪除)u (更新)

其它

選項: -t (設(shè)置壓縮檔案格式)

posted @ 2012-11-03 14:16 jackdong 閱讀(2121) | 評論 (0)編輯 收藏

http://hi.baidu.com/uejwncfuebbprwe/item/30cafb2d3d2e5584af48f54a

本節(jié)介紹幾個常見的壓縮算法。

(一) 字典算法
  字典算法是最為簡單的壓縮算法之一。它是把文本中出現(xiàn)頻率比較多的單詞或詞匯組合做成一個對應(yīng)的字典列表,并用特殊代碼來表示這個單詞或詞匯。例如:
  有字典列表:
  00=Chinese
  01=People
  02=China
  源文本:I am a Chinese people,I am from China 壓縮后的編碼為:I am a 00 01,I am from 02。壓縮編碼后的長度顯著縮小,這樣的編碼在SLG游戲等專有名詞比較多的游戲中比較容易出現(xiàn),比如《SD高達》。
(二) 固定位長算法(Fixed Bit Length Packing)
  這種算法是把文本用需要的最少的位來進行壓縮編碼。
比如八個十六進制數(shù):1,2,3,4,5,6,7,8。轉(zhuǎn)換為二進制為:00000001,00000010,00000011,00000100,00000101,00000110,00000111,00001000。每個數(shù)只用到了低4位,而高4位沒有用到(全為0),因此對低4位進行壓縮編碼后得到:0001,0010,0011,0100,0101,0110,0111,1000。然后補充為字節(jié)得到:00010010,00110100,01010110,01111000。所以原來的八個十六進制數(shù)縮短了一半,得到4個十六進制數(shù):12,34,56,78。
這也是比較常見的壓縮算法之一。

(三) RLE算法
  這種壓縮編碼是一種變長的編碼,RLE根據(jù)文本不同的具體情況會有不同的壓縮編碼變體與之相適應(yīng),以產(chǎn)生更大的壓縮比率。

  變體1:重復(fù)次數(shù)+字符
文本字符串:A A A B B B C C C C D D D D,編碼后得到:3 A 3 B 4 C 4 D。

  變體2:特殊字符+重復(fù)次數(shù)+字符
文本字符串:A A A A A B C C C C B C C C,編碼后得到:B B 5 A B B 4 C B B 3 C。編碼串的最開始說明特殊字符B,以后B后面跟著的數(shù)字就表示出重復(fù)的次數(shù)。

  變體3:把文本每個字節(jié)分組成塊,每個字符最多重復(fù) 127 次。每個塊以一個特殊字節(jié)開頭。那個特殊字節(jié)的第 7 位如果被置位,那么剩下的7位數(shù)值就是后面的字符的重復(fù)次數(shù)。如果第 7 位沒有被置位,那么剩下 7 位就是后面沒有被壓縮的字符的數(shù)量。例如:文本字符串:A A A A A B C D E F F F。編碼后得到:85 A 4 B C D E 83 F(85H= 10000101B、4H= 00000100B、83H= 10000011B)

  以上3種不RLE變體是最常用的幾種,其他還有很多很多變體算法,這些算法在Winzip Winrar這些軟件中也是經(jīng)常用到的。

(四) LZ77算法
  LZ77算法是由 Lempel-Ziv 在1977發(fā)明的,也是GBA內(nèi)置的壓縮算法。LZ77算法有許多派生算法(這里面包括 LZSS算法)。它們的算法原理上基本都相同,無論是哪種派生算法,LZ77算法總會包含一個動態(tài)窗口(Sliding Window)和一個預(yù)讀緩沖器(Read Ahead Buffer)。動態(tài)窗口是個歷史緩沖器,它被用來存放輸入流的前n個字節(jié)的有關(guān)信息。一個動態(tài)窗口的數(shù)據(jù)范圍可以從 0K 到 64K,而LZSS算法使用了一個4K的動態(tài)窗口。預(yù)讀緩沖器是與動態(tài)窗口相對應(yīng)的,它被用來存放輸入流的前n個字節(jié),預(yù)讀緩沖器的大小通常在0 – 258 之間。這個算法就是基于這些建立的。用下n個字節(jié)填充預(yù)讀緩存器(這里的n是預(yù)讀緩存器的大小)。在動態(tài)窗口中尋找與預(yù)讀緩沖器中的最匹配的數(shù)據(jù),如果匹配的數(shù)據(jù)長度大于最小匹配長度 (通常取決于編碼器,以及動態(tài)窗口的大小,比如一個4K的動態(tài)窗口,它的最小匹配長度就是2),那么就輸出一對〈長度(length),距離(distance)〉數(shù)組。長度(length)是匹配的數(shù)據(jù)長度,而距離(distance)說明了在輸入流中向后多少字節(jié)這個匹配數(shù)據(jù)可以被找到。

  例如:(假設(shè)一個 10個字節(jié)的動態(tài)窗口, 以及一個5個字節(jié)的預(yù)讀緩沖器)
文本:A A A A A A A A A A A B A B A A A A A
--------------------- =========
動態(tài)窗口 預(yù)讀緩存器
動態(tài)窗口中包含10個A ,這就是最后讀取的10個字節(jié)。預(yù)讀緩沖器包含了 B A B A A。編碼的第一步就是尋找動態(tài)窗口與預(yù)讀緩存器相似長度大于2的字節(jié)部分。在動態(tài)窗口中找不到B A B A A,所以B就被按照字面輸出。然后動態(tài)窗口滑過1個字節(jié),現(xiàn)在暫時輸出了一個B。
第二步:A A A A A A A A A A A B A B A A A A A
--------------------- =========
動態(tài)窗口 預(yù)讀緩存器
現(xiàn)在預(yù)讀緩沖器包含A B A A A,然后再和動態(tài)窗口進行比較。這時,在動態(tài)窗口找到了相似長度為2的A B,因此一對〈長度, 距離〉就被輸出了。長度(length)是2 并且向后距離也是2,所以輸出為<2,2>,然后動態(tài)窗口滑過2個字節(jié)。現(xiàn)在已經(jīng)輸出了B <2,2>。
第三步:A A A A A A A A A A A B A B A A A A A
--------------------- =========
動態(tài)窗口 預(yù)讀緩存器
繼續(xù)上面的方法得到輸出結(jié)果<5,8>。現(xiàn)在已經(jīng)輸出了B <2,2> <5,8>。
最終的編碼結(jié)果是:A A A A A A A A A A A B <2,2> <5,8>。
但數(shù)組是無法直接用二進制來表示的,LZ77會把編碼每八個數(shù)分成一組,每組前用一個前綴標示來說明這八個數(shù)的屬性。比如數(shù)據(jù)流:A B A C A C B A C A按照LZ77的算法編碼為:A B A C<2,2> <4,5>,剛好八個數(shù)。按照LZ77的規(guī)則,用“0”表示原文輸出,“1”表示數(shù)組輸出。所以這段編碼就表示為:00001111B(等于0FH),因此得到完整的壓縮編碼表示:F A B A C 2 2 4 5。雖然表面上只縮短了1個字節(jié)的空間,但當數(shù)據(jù)流很長的時候就會突出它的優(yōu)勢,這種算法在zip格式中是經(jīng)常用到。

  除此之外還有很多壓縮算法,像霍夫曼編碼(Huffman Encoding)等等。這些編碼也是非常的著名而且壓縮效率極高,不過這些編碼的算法相對比較繁瑣,規(guī)則也很復(fù)雜,由于篇幅就不逐一介紹了。如果大家對這方面感興趣可以到網(wǎng)站相關(guān)網(wǎng)站查詢資料。

  小結(jié):這一節(jié)介紹的幾種算法在GBA上是比較容易遇到的典型算法,但絕不是說只有這幾種,還是有很多時候都得自己ASM跟蹤進行分析,這里介紹給大家希望能拓展大家的思維,方便進行程序分析,對于一切的問題ASM才是萬能的。
posted @ 2012-11-03 13:47 jackdong 閱讀(994) | 評論 (0)編輯 收藏

Visual Studio 2008控制臺程序無法輸出中文!?解決方法只需要設(shè)置一下區(qū)域即可。沒有設(shè)置區(qū)域前如下圖:

Visual Studio 2008控制臺程序無法輸出中文 - 有何不可 - 不要辜負 期望

包含頭文件:#include <locale.h>

函數(shù):_tsetlocale(LC_ALL, _T("chs"));

設(shè)置區(qū)域后如下圖:

Visual Studio 2008控制臺程序無法輸出中文 - 有何不可 - 不要辜負 期望

參考,摘自微軟MSDN

控制臺中的編碼程序員在對控制臺或“文本模式”應(yīng)用程序編程時可同時使用 Unicode 和 SBCS 或 DBCS 編碼。出于承襲方面的考慮,非 Unicode 控制臺 I/O 函數(shù)使用控制臺代碼頁(默認為 OEM 代碼頁)。Windows 中的所有其他非 Unicode 函數(shù)都使用 Windows 代碼頁。這意味著其他函數(shù)可能無法正確地處理由控制臺函數(shù)返回的字符串,反之亦然。例如,如果 FindFirstFileA 返回了一個包含某個非 ASCII 字符的字符串,WriteConsoleA 將無法正常地顯示該字符串。

要一直跟蹤哪些函數(shù)需要哪些編碼并正確轉(zhuǎn)換文本參數(shù)的編碼非常困難。函數(shù) SetFileApisToOEM、SetFileApisToANSI 和幫助程序函數(shù) AreFileApisANSI 的引入極大地簡化了此項工作。前兩個函數(shù)可接受或返回文件名稱,對 KERNEL32.dll 導(dǎo)出的非 Unicode 函數(shù)有效果。顧名思義,SetFileApisToOEM 將這些函數(shù)設(shè)置為接受或返回與當前系統(tǒng)區(qū)域設(shè)置對應(yīng)的 OEM 字符集中的文件名稱,而 SetFileApisToANSI 用于為這些名稱恢復(fù)默認值(Windows ANSI 編碼)。使用 AreFileApisANSI 可查詢到當前選定的編碼。

利用 SetFileApisToOEM 可輕松地解決 WindFirstFileA(或 GetCurrentDirectoryA,或 Win32 API 的任何文件處理函數(shù))的結(jié)果無法直接傳送給 WriteConsoleA 這一問題:在調(diào)用 SetFileApisToOEM 后,WindFirstFileA 將返回以 OEM(而不是以 Windows ANSI 字符集)編碼的文本。但此解決方案并非應(yīng)對所有 Windows ANSI 與 OEM 不兼容情況的萬能良方。設(shè)想您需要從某個文件處理函數(shù)中獲取文本,然后將其輸出到控制臺,接著用其他函數(shù)(不受SetFileApisToOEM 的影響)處理該文本。這種絕對理想的情況需要更改編碼。否則,您將需要調(diào)用 SetFileApisToOEM 以獲取用于控制臺輸出的數(shù)據(jù),然后調(diào)用SetFileApisToANSI 得到同一文本(使用另一種編碼)進行內(nèi)部處理。另一種 SetFileApisToOEM 無法發(fā)揮作用的情況對命令行參數(shù)的處理:當您的應(yīng)用程序的入口點為 main(而不是 wmain)時,參數(shù)始終作為 Windows ANSI 字符串數(shù)組進行傳遞。這一切顯然使編寫非 Unicode 控制臺應(yīng)用程序的程序員的工作變得更復(fù)雜了。

更為復(fù)雜的是為控制臺編寫的 8 位代碼需要處理兩種不同類型的區(qū)域設(shè)置。在編寫代碼時,您可以使用 Win32 API 或 C 運行時庫函數(shù)。Win32 API 的 ANSI 函數(shù)假定文本是針對當前控制臺代碼頁(系統(tǒng)區(qū)域設(shè)置默認定義的)編碼的。SetConsoleCP 和 SetConsoleOutputCP 函數(shù)可更改這些操作中使用的代碼頁。用戶可在命令提示符下調(diào)用 chcp or mode con cp select= 命令,這將會更改當前控制臺的代碼頁。設(shè)置固定的控制臺代碼頁的另一種方法是用默認的代碼頁集創(chuàng)建控制臺快捷方式(僅適用于東亞本地化版本的操作系統(tǒng))。 應(yīng)用程序應(yīng)能夠響應(yīng)用戶的操作。

C 運行時庫(CRT 函數(shù))中區(qū)分區(qū)域設(shè)置函數(shù)可依照 (_w)setlocale 調(diào)用所定義的設(shè)置處理文本。如果代碼中未調(diào)用 (_w)setlocale,則 CRT 函數(shù)對這些操作使用 ANSI "C" 語言不變區(qū)域設(shè)置,這樣就丟失了特定于語言的功能。

該函數(shù)的聲明為:

setlocale( int category, const char *locale)或

_wsetlocale( int category, const wchar_t *locale)其中 "category" 用于定義受影響的特定于區(qū)域的設(shè)置(如果指定了 LC_ALL,則全部定義)。可變區(qū)域設(shè)置可以是顯式區(qū)域設(shè)置名稱或下面的某一項:

".OCP" 指與當前用戶區(qū)域設(shè)置對應(yīng)的 OEM 代碼頁
".ACP" 或 "" 指與當前用戶區(qū)域設(shè)置對應(yīng)的 Windows 代碼頁
".OCP" 和 ".ACP" 參數(shù)始終引用用戶區(qū)域設(shè)置(而不是系統(tǒng)區(qū)域設(shè)置)的設(shè)置值。因此不能將它們用于設(shè)置 LC_CTYPE。此 "category" 定義了 Unicode 向 8 位轉(zhuǎn)換的規(guī)則和其他文本處理程序,必須遵循控制臺的設(shè)置(可使用 GetConsoleCP 和 GetConsoleOutputCP 訪問)。

對控制臺應(yīng)用程序最佳的長期解決方案是使用 Unicode,因為 Unicode 接口是針對 Win32 API 和 C 運行時庫定義的。今后的編程模型仍需要您顯式地設(shè)置區(qū)域設(shè)置,但至少可肯定通過 Win32 和 CRT 看到的文本不再需要進行代碼轉(zhuǎn)換。
posted @ 2012-11-03 11:09 jackdong 閱讀(1365) | 評論 (0)編輯 收藏

http://www.csdn.net/article/2012-10-31/2811327-windows-phone-8-sdk

摘要:微軟在近期舉行的Build 2012開發(fā)者大會上,發(fā)布了Windows Phone 8 SDK 8.0,現(xiàn)已開放下載,最新SDK為App開發(fā)者提供了更多便捷服務(wù),包括原生應(yīng)用開發(fā)工具,手機版Windows Runtime以及新的內(nèi)核。

Windows Phone 8發(fā)布之后,開發(fā)者最期待的就是Windows Phone 8 SDK,盼了幾個月終于盼到,該SDK都有哪些新特性?對系統(tǒng)又有什么要求?本文將分兩大部分(開發(fā)工具及功能&測試工具及功能)作詳細解釋。

開發(fā)工具及功能:

1)Visual Studio所包括的新特性:

  • Direct3D應(yīng)用項目模板:若想了解更多模板信息,可查看《如何在一個模板中為Windows Phone創(chuàng)建新App》),若想了解更多Direct3D應(yīng)用信息,可查看《Direct3D及游戲》。
  • 項目模板本地支持:現(xiàn)在的項目模板包括對本地化的內(nèi)置支持,讓你輕松使用最佳實例開發(fā)本地化App,省去大量配置步驟。想了解更多信息,請查看《如何為windows Phone開發(fā)本地化App
  • 調(diào)試管理:在Project Designer調(diào)試頁面,你可以選擇調(diào)試管理代碼或者一款應(yīng)用的本地代碼部分,甚至能同時調(diào)試App及后端代理器。
  • XNA框架支持:不能開發(fā)新的XNA框架的App。更多信息,請查看《XNA框架及Windows Phone 8開發(fā)》。

2)Windows Phone 8模擬器所包括的新特性:

  • 支持多分辨率:(更多信息請看這里
  • Windows Phone 8模擬器的系統(tǒng)要求:Windows Phone 8模擬器運行于Windows Hyper-V上,所以與之有相同的硬件,軟件及配置要求,但若你的電腦不支持Hyper-V,你仍然可以為Windows Phone開發(fā)App,亦可在Windows Phone 8設(shè)備設(shè)上調(diào)試并測試這些App。更多性信息請看這里
  • Windows Phone 8模擬器的網(wǎng)絡(luò)要求:在Windows Phone OS 7.1模擬器中,使用的是開發(fā)電腦的網(wǎng)絡(luò)連接,但Windows Phone 8模擬器配置本身就是網(wǎng)絡(luò)中的一個獨立設(shè)備,所以會有一些變化,更多信息看這里。)

3)Manifest設(shè)計:你現(xiàn)在可以在應(yīng)用的Manifest文件中,通過用戶友好型界面增加,移除并改變元素,更多信息可查看《如何修改Windows Phone的應(yīng)用Manifest清單文件》。

4)獨立資源存儲管理器:有新的命令行選項,可以讓你將目標設(shè)備特殊化。更多信息可查看《如何使用Windows Phone的獨立資源存儲器工具

測試工具及功能:

1)測試應(yīng)用的本機圖像:你可以自己事先測試應(yīng)用程序的本機圖像,自己體驗過之后,找到不足之處進行修改,以便給用戶帶來更好的體驗。更多信息可點擊這里

2)應(yīng)用的監(jiān)測與分析:現(xiàn)在除了應(yīng)用程序的分析以外,還增加了監(jiān)測功能,能檢測你應(yīng)用的主要特點,并根據(jù)這些特點進行評分,以便你在開發(fā)App過程中確保應(yīng)用的品質(zhì)及性能。更多信息可查看《Windows Phone的App監(jiān)測》。

3)仿真儀表盤:你可以在Windows Phone 8儀表盤中事先檢查判斷所開發(fā)的App在特殊情況下的反應(yīng),帶來更好的用戶體驗,這里所指的情況包括:

  • 信號不好或者帶寬不夠的情況
  • 突然有手機提醒或者消息推送
  • 鎖屏狀態(tài)

更多信息,看這里

4)截屏:詳情請查看《如何為Windows Phone Store創(chuàng)建截屏

Windows Phone SDK 8.0 系統(tǒng)要求:

  • 操作系統(tǒng):Windows 8 64位客戶端版本 
  • 硬件:4GB可用硬盤空間 ;4GB RAM ;64位CPU 
  • Windows Phone 8 模擬器要求:Windows 8 Pro 版本或更高版本 ;要求支持二級地址轉(zhuǎn)換 (SLAT) 的處理器 

總結(jié)

總體來講,WP SDK 8.0為App開發(fā)者提供了更多便捷服務(wù),包括原生應(yīng)用開發(fā)工具,手機版Windows Runtime以及新的內(nèi)核。Windows Phone SDK 8.0 可用于構(gòu)建WP 8.0和WP 7.5的應(yīng)用及游戲,將提供一個適用于Windows Phone的獨立Visual Studio Express 2012版本作為Visual Studio 2012 Prefessional Premium或Ultimate版本的外接程序進行工作。利用SDK,開發(fā)者可以使用已有的代碼來構(gòu)建或托管本機代碼應(yīng)用,另外還包括在特殊情況下用戶分析和測試Windows Phone應(yīng)用的多個模擬器和其它工具,這里進入下載

注意:開發(fā)中心的注冊時間到11月7日截止,大家千萬注意不要錯過時間,另外賬號注冊費用只需要$8,這比之前的$99便宜了許多。

(文章編譯:陳徐天九 責任編輯:張寧)

文章來源:msdn

本文為CSDN編譯整理,未經(jīng)允許不得轉(zhuǎn)載。如需轉(zhuǎn)載請聯(lián)系market@csdn.net。

posted @ 2012-11-01 12:33 jackdong 閱讀(392) | 評論 (0)編輯 收藏

http://www.cnblogs.com/giraffe/archive/2011/10/21/CUDA-Ubuntu-Install.html

1:下載CUDA 4.0

安裝官網(wǎng)最新的顯卡驅(qū)動:

安裝方法可以參考:

《Ubuntu11.04下安裝Nvidia顯卡驅(qū)動的方法》

然后從NVIDIA網(wǎng)站(http://developer.nvidia.com/cuda-downloads)下載

CUDA Toolkit for Ubuntu Linux 10.10;

GPU Computing SDK;

CUDA Tools SDK。

 

2:安裝CUDA Toolkit for Ubuntu Linux 10.10

由于在ubuntu11.04下無法正常的用sh命令進行安裝,所以需要用以下命令進行安裝:

chmod +x cudatoolkit_4.0.17_linux_32_ubuntu10.10.run  
sudo ./cudatoolkit_4.0.17_linux_32_ubuntu10.10.run

注意上面工具包的名稱要跟你下載的工具包名稱一致,不同系統(tǒng)版本的文件名略有差別。

預(yù)設(shè)是安裝在/usr/local/cuda 目錄下,建議就依照他的預(yù)設(shè)路徑安裝。

安裝完成后要設(shè)定Library 的Path,有兩個方式:

(1)一種是更改LD_LIBRARY_PATH 環(huán)境變數(shù):

在用戶名的目錄下開.bashrc文件,可以通過vi命令或者gedit命令進行編輯,我更喜歡后者,在末尾處加入兩行命令:

gedit ~/.bashrc
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib:$LD_LIBRARY_PATH

如果是64位系統(tǒng)的話需要將上一行的lib改為lib64,然后保存。

 

(2)另一種方法是直接加在/etc/ld.so.conf.d/ 里面:

sudo echo "/usr/local/cuda/lib" >> /etc/ld.so.conf.d/cuda-40.conf
sudo ldconfig

如果是64位系統(tǒng)同樣將lib改為lib64

再設(shè)定PATH:  

echo 'export PATH=$PATH:/usr/local/cuda/bin' >> ~/.bashrc

 

3:安裝CUDA Tools SDK:
chmod +x cudatools_4.0.17_linux_32.run  
sudo ./cudatools_4.0.17_linux_32.run

預(yù)設(shè)是安裝在/usr/local/cuda/CUDAToolsSDK 目錄下。

 

4:安裝GPU Computing SDK:
chmod +x gpucomputingsdk_4.0.17_linux.run  
./gpucomputingsdk_4.0.17_linux.run

預(yù)設(shè)是安裝在自己帳號的~/NVIDIA_GPU_Computing_SDK 目錄下,安裝時要設(shè)置CUDA 安裝的路徑: Enter CUDA install path (default /usr/local/cuda):

若CUDA 都是依照預(yù)設(shè)路徑安裝,則這里就不需要更動。

 

5:設(shè)定GCC編譯器  

CUDA 4.0 目前只支援到gcc 4.4,若是只有裝gcc 4.5 的話,還要再裝一下gcc 4.4 才能編譯: 

sudo apt-get install gcc-4.4 g++-4.4 

接著要讓編譯時能夠使用gcc 4.4,一種方式是將系統(tǒng)的/usr/bin/gcc 改連到/usr/bin/gcc-4.4,/usr/bin/g++ 也一樣改連到/usr/bin/ g++-4.4,或是使用update-alternative:  

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.5 150  
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.5 150
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 100

接著使用update-alternatives 選擇4.4 版的gcc:  

sudo update-alternatives --config gcc  

執(zhí)行后選擇gcc-4.4,再接著選擇4.4 版的g++:  

sudo update-alternatives --config g++  

執(zhí)行后選擇g++-4.4  

若不想修改整個系統(tǒng)的設(shè)定,有另一個辦法可以處理,自己建一個~/bin 目錄,然后建立gcc-4.4 與g++-4.4 的連結(jié),再將這個路徑加入自己的PATH 中,這樣就不會影響其他的程式:

mkdir ~/bin  
ln -s /usr/bin/gcc-4.4 ~/bin/gcc
ln -s /usr/bin/g++-4.4 ~/bin/g++

然后在每次要編譯CUDA 程式前執(zhí)行: 

export PATH=~/bin:$PATH  

這樣就不需要更動到系統(tǒng)其他程式的設(shè)定了。  

 

6:編譯GPU Computing SDK code samples  
cd ~/NVIDIA_GPU_Computing_SDK 
make

若是幸運的話,這樣就大公告成了,但通常都會有些問題,像編譯時若是出現(xiàn)類似這樣的問題:  

/usr/bin/ld: cannot find -lXi  
/usr/bin/ld: cannot find -lXmu
/usr/bin/ld: cannot find -lglut
collect2: ld returned 1 exit status

是表示有一些必要的Library 沒裝,用apt-cache 找一下再用apt-get 裝起來就可以了:  

apt-get install libxi-dev libxmu-dev libglut3-dev  

我安裝的時候就出現(xiàn)了

/usr/bin/ld: cannot find -lGL  
collect2: ld returned 1 exit status

這其實是因為沒有鏈接到正確的libGL的庫,這時候執(zhí)行以下命令

sudo -i
cd /usr/lib/
ls -al |grep libGL.so.*

執(zhí)行完上述命令后,會看見有一個與你按裝的驅(qū)動程序相類似的編號呃so,如我的驅(qū)動程序版本是280.13就會有一個

libGL.so.280.13的文件,然后執(zhí)行以下命令。當然,這個需要root權(quán)限

rm libGL.so
ln -s libGL.so.280.13 libGL.so

 

安裝完成之后就要檢驗一下CUDA安裝是否成功

進入~/NVIDIA_GPU_Computing_SDK/C/bin/linux/release目錄下看看是不是有很多可執(zhí)行文件

注意deviceQuery這個可執(zhí)行文件,我們就是要執(zhí)行它來判斷自己的CUDA是否安裝成功,輸入./deviceQuery命令來執(zhí)行它,如果出現(xiàn)你的顯卡信息則說明CUDA已經(jīng)安裝成功。

posted @ 2012-10-31 09:03 jackdong 閱讀(561) | 評論 (0)編輯 收藏

http://www.cnblogs.com/giraffe/archive/2011/10/21/Ubuntu11-nvidiaDriver.html

lz的顯卡是GeForce GTX 460SE。而本人是一個灰常灰常的新手,結(jié)合網(wǎng)上的教程和自已屢試屢敗的經(jīng)驗終于把顯卡驅(qū)動安裝成功了
我安裝總是出現(xiàn)下列錯誤:
ERROR: The Nouveau kernel driver is currently in use by your system. This
driver is incompatible with the NVIDIA driver, and must be disabled
before proceeding. Please consult the NVIDIA driver README and your
Linux distribution's documentation for details on how to correctly
disable the Nouveau kernel driver.

看到好多教程都是修改已有的blacklist.conf,來解決此問題,但我修改以后出現(xiàn)了Ctrl + Alt +F1進入不了第一控制臺,然后找nvidia的官方說明,寫的是建立一個新的disable-nouveau.conf然后配置, 貼出來好方便大家參考:

具體步聚:
1.去官方下載最新版的nVidia驅(qū)動,現(xiàn)最新版本是Nvidia-Linux-x86-280.13.run

http://www.nvidia.cn/Download/index.aspx?lang=cn


2.刪除之前所安裝的nVidia驅(qū)動(沒安的略去這一步)

sudo apt-get --purge remove nvidia-*

3.建立并修改disable-nouveau.conf

sudo gedit /etc/modprobe.d/disable-nouveau.conf

在里面填入兩行內(nèi)容:

 blacklist nouveau
options nouveau modeset=0

然后重啟電腦,重啟之后你會發(fā)現(xiàn)畫面質(zhì)量明顯降低,證明代碼生效了。


4.按Ctrl + Alt +F1到第一控制臺,輸入用戶名,密碼登陸后執(zhí)行:

sudo /etc/init.d/gdm stop

 這是因為Nvidia官方驅(qū)動不能運行在X-server下,所以要關(guān)閉GUI。


5.進入驅(qū)動所在文件夾,安裝驅(qū)動

sudo sh NVIDIA-Linux-x86-280.13.run

注意區(qū)分大小寫,安裝過程中出現(xiàn)更新,選擇NO,安裝完畢,然后配置Xconfig:

sudo nvidia-xconfig

  

6.配置好之后,重啟圖形界面,Ok~

sudo /etc/init.d/gdm restart
posted @ 2012-10-31 09:03 jackdong 閱讀(381) | 評論 (0)編輯 收藏

http://blog.csdn.net/lanzhengpeng2/article/details/2947262

最近在寫64位匯編,設(shè)置編譯命令是件繁瑣而又重復(fù)的勞動。網(wǎng)上也有不少文章介紹怎么樣編譯64位匯編的,但都覺得復(fù)雜,有的還需要下載其他的匯編軟件,最囧的是:有篇文章給出的下載地址下載下來的文件干脆就直接是木馬!

既然我們使用VS系列,就不要舍近求遠了。使用MS提供的ml64,安全放心,也無兼容性問題。下面開始說明怎么樣設(shè)置:

一、在vc的安裝目錄下,找到“VCProjectDefaults/masm.rules”,復(fù)制出來,改個名字,用記事本等純文本編輯器打開

二、masm.rules的前面幾行的內(nèi)容如下:

  1. ?<?xml version="1.0" encoding="utf-8"?>
  2. <VisualStudioToolFile
  3.     Name="Microsoft Macro Assembler"
  4.     Version="8.00"
  5.     >
  6.     <Rules>
  7.         <CustomBuildRule
  8.             Name="MASM"
  9.             DisplayName="Microsoft Macro Assembler"
  10.             CommandLine="ml.exe /c [AllOptions] [AdditionalOptions] /Ta[inputs]"
  11.             Outputs="[$ObjectFileName]"
  12.             FileExtensions="*.asm"
  13.             ExecutionDescription="Assembling..."
  14.             >

替換ml.exe為ml64.exe,然后把名稱,擴展名修改成你喜歡的,下面是我的修改:

  1. ?<?xml version="1.0" encoding="utf-8"?>
  2. <VisualStudioToolFile
  3.     Name="Macro Assembler x64"
  4.     Version="8.00"
  5.     >
  6.     <Rules>
  7.         <CustomBuildRule
  8.             Name="MASM x64"
  9.             DisplayName="Macro Assembler x64"
  10.             CommandLine="ml64.exe /c [AllOptions] [AdditionalOptions] /Ta[inputs]"
  11.             Outputs="[$ObjectFileName]"
  12.             FileExtensions="*.asm64"
  13.             ExecutionDescription="Assembling..."
  14.             >

保存,關(guān)閉文件。

三、在解決方案資源管理器里,右鍵點中你的項目,出來一個菜單;選擇“自定義生成規(guī)則...”,在彈出的對話框上,點“查找現(xiàn)有的...”,打開你剛才編輯的.rules文件。然后你就應(yīng)該在“可用的規(guī)則文件”列表里看到你剛才修改的名字和擴展名(我的叫做asm64),在其左邊的檢查框里勾上,關(guān)閉這個窗口。

四、新建一個文本文件,改名成“文件名稱.你喜歡的擴展名”,如我的就叫做“1.asm64”,然后把這個文件加入到工程里。不出意外,VS就自動根據(jù)擴展名選擇了你剛才修改的規(guī)則;如果出了意外,則單獨對“1.asm64”進行設(shè)置:在解決方案資源管理器里,右鍵點中這個文件,選擇屬性;然后在對話框里左邊選擇“配制屬性/常規(guī)”,然后在工具里選擇你剛才命名的規(guī)則。如我的叫做“Macro Assembler x64”。點“確認”按鈕關(guān)閉這個對話框。

五、在“1.asm64”文件里寫上正確的匯編,編譯之。不出意外,64位匯編已經(jīng)正確連接到你的程序里了。

六、打開“1.asm64”文件的屬性對話框,應(yīng)該能看到不少設(shè)置選項,慢慢琢磨吧。

 

show一段64位匯編代碼:

 

  1. INCLUDE listing.inc
  2. pdata   SEGMENT
  3. ___real_value_1 DD 03f800000r
  4.     DD  03f800000r
  5.     DD  03f800000r
  6.     DD  03f800000r
  7. ___real_value_negation DD 080000000H
  8.     DD  080000000H
  9.     DD  080000000H
  10.     DD  080000000H
  11. pdata   ENDS
  12. ;void MulAdd(D3DMATRIX & Out,const D3DMATRIX & m1,FLOAT f,const D3DMATRIX & m2)
  13. ;{
  14. ;   register FLOAT * pOut = (FLOAT *)&Out;
  15. ;   register const FLOAT * pIn1 = (FLOAT *)&m1;
  16. ;   register const FLOAT * pIn2 = (FLOAT *)&m2;
  17. ;   for(register int i=15;i>=0;--i)
  18. ;       pOut[i] = pIn1[i] * f + pIn2[i];
  19. ;}
  20. PUBLIC ?MulAdd@@YAXAEAU_D3DMATRIX@@AEBU1@M1@Z
  21. _TEXT   SEGMENT
  22. ?MulAdd@@YAXAEAU_D3DMATRIX@@AEBU1@M1@Z  PROC
  23.     shufps xmm2,xmm2,0
  24.     
  25.     movups xmm0,[rdx]
  26.     movups xmm1,[r9]
  27.     mulps xmm0,xmm2
  28.     addps xmm0,xmm1
  29.     movups [rcx],xmm0
  30.     
  31.     movups xmm0,[rdx+16]
  32.     movups xmm1,[r9+16]
  33.     mulps xmm0,xmm2
  34.     addps xmm0,xmm1
  35.     movups [rcx+16],xmm0
  36.     movups xmm0,[rdx+32]
  37.     movups xmm1,[r9+32]
  38.     mulps xmm0,xmm2
  39.     addps xmm0,xmm1
  40.     movups [rcx+32],xmm0
  41.     movups xmm0,[rdx+48]
  42.     movups xmm1,[r9+48]
  43.     mulps xmm0,xmm2
  44.     addps xmm0,xmm1
  45.     movups [rcx+48],xmm0
  46.     
  47.     ret 0
  48.     
  49. ?MulAdd@@YAXAEAU_D3DMATRIX@@AEBU1@M1@Z  ENDP
  50. _TEXT   ENDS

祝各位同仁_WIN64旅程愉快!

posted @ 2012-10-30 11:13 jackdong 閱讀(819) | 評論 (0)編輯 收藏

http://www.cnblogs.com/linzheng/archive/2012/07/29/2614014.html

     在C++/CX里面是使用Platform::String類來表示字符串的類型,在windows運行時的接口和方法中,需要使用Platform::String來作為字符串參數(shù)的傳遞。如果需要使用標準C++的字符串類型如wstring或者string的時候,可以將Platform::String與標準的C++的字符串進行互相的轉(zhuǎn)換。

 

String類型的構(gòu)造

String類型表示的是char16的字符串,可以直接通過字符串的賦值來進行構(gòu)造也可以使用標準C++的wchar_t*指針進行構(gòu)造。

// Initializing a String^ by using string literals
    String^ str1 = "Test"// ok for ANSI text. uses current code page
    String^ str2("Test");
    String
^ str3 = L"Test";
    String
^ str4(L"Test");


    
//Initialize a String^ by using another String^

    String
^ str6(str1);
    auto str7 
= str2;

    
// Initialize a String from wchar_t* and wstring
    wchar_t msg[] = L"Test";
    String
^ str8 = ref new String(msg);
    std::wstring wstr1(L
"Test");
    String
^ str9 = ref new String(wstr1.c_str());
    String
^ str10 = ref new String(wstr1.c_str(), wstr1.length());

 

字符的操作

 String提供了相關(guān)的方法來操作字符串,其中可以使用String::Data()方法來返回一個String^ 對象的wchar_t*指針。

 

// Concatenation 
    auto str1 = "Hello" + " World";
    auto str2 
= str1 + " from C++/CX!";    
    auto str3 
= String::Concat(str2, " and the String class");
    
    
// Comparison
    if (str1 == str2) /*  */ }
    
if (str1->Equals(str2)) /*  */ }
    
if (str1 != str2) /*  */ }
    
if (str1 < str2 || str1 > str2) /*  */};
    
int result = String::CompareOrdinal(str1, str2);
    
    
if(str1 == nullptr) /* */};
    
if(str1->IsEmpty()) /* */};

   
// Accessing individual characters in a String^
    auto it = str1->Begin();
    char16 ch 
= it[0];

 

String類型的轉(zhuǎn)換

String類型可以和標準C++的wstring進行互相的轉(zhuǎn)換

 

// compile with: /ZW
#include <string>

using namespace std;
using namespace Platform;

int main( array<String^>^ args ) 
{
    
// Create a String^ variable statically or dynamically from a 

literal 
string
    String
^ str1 = "AAAAAAAA";
    
    
// Use the value of str1 to create the ws1 wstring variable.
    wstring ws1( str1->Data() ); 
    
// The value of ws1 is L"AAAAAAAA".

    
// Manipulate the wstring value.
    wstring replacement( L"BBB" );
    ws1 
= ws1.replace ( 13, replacement );
    
// The value of ws1 is L"ABBBAAAA".

    
// Assign the modified wstring back to str1. 
    str1 = ref new String( ws1.c_str() ); 

    
return 0;
}


posted @ 2012-10-29 21:51 jackdong 閱讀(420) | 評論 (0)編輯 收藏

http://www.cnblogs.com/linzheng/archive/2012/07/07/2580848.html

Windows運行時組件是Windows 8里面通用的公共庫,它可以使用C++,C#或者VB來編寫,不過你的Windows 8 metro是用什么語言編寫都可以調(diào)用無縫地調(diào)用Windows運行時組件。

下面通過一個C#編寫的Windows 8項目來調(diào)用一個用C++編寫的Windows運行時組件。

創(chuàng)建一個Windows運行時組件:

編寫如下的代碼:

#include "pch.h"
#include 
"WinRTComponent.h"

using namespace CppWinRTComponentDll2;

int CalculatorSample::Add(int x, int y)
{
    
return x+y;
}

頭文件

#pragma once

using namespace Windows::Foundation;

namespace CppWinRTComponentDll2
{

    
public ref class CalculatorSample sealed
    
{
    
public:
        
int Add(int x, int y);

    }
;
}

 

在C#編寫的項目中調(diào)用Windows運行時組件的C++方法

添加Windows運行時組件

UI部分

 

<Page
    
x:Class="TestWinRTCSDemo.MainPage"
    IsTabStop
="false"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local
="using:TestWinRTCSDemo"
    xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable
="d">

    
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        
<StackPanel>
            
<TextBox x:Name="txtX" HorizontalAlignment="Center" Height="45" Width="258"></TextBox>
            
<TextBlock   Text="+" HorizontalAlignment="Center"  Height="45" Width="258" FontSize="14" FontWeight="Bold"/>
            
<TextBox x:Name="txtY" HorizontalAlignment="Center" Height="45" Width="258"></TextBox>
            
<Button Content="調(diào)用WinRT方法來相加" HorizontalAlignment="Center" Click="Button_Click_1" ></Button>
            
<TextBox x:Name="txtAddResult" HorizontalAlignment="Center" Height="45" Width="258"/>
        
</StackPanel>
    
</Grid>
</Page>

C#代碼部分

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using CppWinRTComponentDll2;//引入Windows運行時的空間

namespace TestWinRTCSDemo
{

    
public sealed partial class MainPage : Page
    
{
        
public MainPage()
        
{
            
this.InitializeComponent();
        }


        
protected override void OnNavigatedTo(NavigationEventArgs e)
        
{
        }


        
private void Button_Click_1(object sender, RoutedEventArgs e)
        
{
            
if (txtX.Text != "" && txtY.Text != "")
            
{
                 CalculatorSample calcobj 
=  new  CalculatorSample();//直接創(chuàng)建Windows運行時里面的對象,很方便
                 int x = Convert.ToInt32(txtX.Text.ToString());
                 
int y = Convert.ToInt32(txtY.Text.ToString());
                 txtAddResult.Text 
= calcobj.Add(x,y).ToString();//調(diào)用Windows運行時里面的方法
            }

        }

    }

}

 

運行的效果


 


posted @ 2012-10-29 21:48 jackdong 閱讀(502) | 評論 (0)編輯 收藏

     摘要:       http://www.cnblogs.com/linzheng/archive/2012/07/03/2574039.html      在Windows 8里面很多API都封裝成了異步的形式,因此異步編程成為了Windows 8的一大特色,同時也給Windows 8的應(yīng)用更好的用戶體驗...  閱讀全文
posted @ 2012-10-29 21:45 jackdong 閱讀(507) | 評論 (0)編輯 收藏

僅列出標題
共10頁: 1 2 3 4 5 6 7 8 9 Last 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜亚洲精品| 国产精品白丝jk黑袜喷水| 国产亚洲精品一区二555| 欧美日韩在线播放一区| 欧美精品手机在线| 欧美精品综合| 欧美日韩三级电影在线| 国产精品婷婷午夜在线观看| 国产精品性做久久久久久| 国产日本欧美在线观看| 在线精品一区| 这里只有精品电影| 久久精品二区三区| 亚洲黄色三级| 一区二区成人精品| 久久爱另类一区二区小说| 欧美成人午夜影院| 国产伦精品一区二区三区高清版| 亚洲第一中文字幕| 亚洲婷婷在线| 免费不卡中文字幕视频| 日韩一区二区久久| 久久综合网络一区二区| 国产精品一级在线| 日韩视频免费观看高清完整版| 欧美在线观看视频| 91久久中文| 欧美中文字幕在线| 欧美日韩免费高清| 伊人成人开心激情综合网| 在线视频精品一区| 免费不卡视频| 久久成人一区| 国产精品久久久久久五月尺| 亚洲国产精品久久久| 欧美亚洲视频一区二区| 亚洲激情欧美| 久久综合九九| 国户精品久久久久久久久久久不卡 | 国产乱码精品一区二区三区五月婷| 尤物九九久久国产精品的分类| 午夜精品久久一牛影视| 亚洲区免费影片| 麻豆精品视频| 黄色精品在线看| 久久精品成人| 亚洲综合精品| 国产精品亚洲成人| 亚洲影院一区| 亚洲理论电影网| 欧美精品一区二区在线播放| 最新亚洲一区| 亚洲高清久久| 欧美电影在线观看完整版| 精品999成人| 久久性色av| 久久久高清一区二区三区| 久久久久久国产精品mv| 国产亚洲精品久久久久动| 久久成人18免费观看| 亚洲午夜国产成人av电影男同| 免费一级欧美在线大片| 亚洲国产第一页| 亚洲国产成人porn| 欧美成人一区二区三区| 亚洲精品一二三| 亚洲久久在线| 国产精品免费观看在线| 欧美一区二区性| 久久国产88| 91久久精品国产91性色| 欧美激情日韩| 欧美日韩精品在线视频| 亚洲你懂的在线视频| 亚洲欧美一区二区三区久久| 国产一区再线| 亚洲国产欧美一区二区三区久久 | 亚洲人成毛片在线播放| 亚洲国产高清高潮精品美女| 欧美久久久久免费| 亚洲欧美日韩国产成人| 久久爱另类一区二区小说| 亚洲精品1234| 一二美女精品欧洲| 国产中文一区| 亚洲精品乱码久久久久久久久| 国产精品sss| 老司机精品导航| 欧美日韩午夜在线视频| 久久久九九九九| 欧美电影资源| 久久成人久久爱| 欧美激情第六页| 久久国产精品黑丝| 欧美岛国在线观看| 久久久久久久久久久成人| 欧美精品日韩综合在线| 久久久亚洲一区| 欧美精品在线观看一区二区| 久久久久www| 欧美午夜片欧美片在线观看| 美女精品在线| 中文网丁香综合网| 欧美视频导航| 欧美成人首页| 国产日韩在线视频| 日韩一区二区精品在线观看| 精品动漫一区| 香蕉国产精品偷在线观看不卡| 99精品免费网| 蜜桃精品一区二区三区| 欧美中文字幕精品| 欧美日韩伊人| 91久久在线播放| 亚洲国产一区在线观看| 欧美伊人影院| 欧美一级二区| 国产精品久久久一区二区| 日韩视频在线播放| 久久久www成人免费毛片麻豆 | 久久中文在线| 国产精品久久久久久久久久直播| 欧美国产亚洲精品久久久8v| 国产一区二区在线免费观看 | 亚洲第一福利社区| 国产视频亚洲| 亚洲一区二区视频在线| 亚洲淫片在线视频| 欧美日韩亚洲一区| 亚洲国产欧美久久| 亚洲美女精品成人在线视频| 另类图片国产| 亚洲国产成人久久综合一区| 亚洲国产精品嫩草影院| 久久久久久久久久久久久女国产乱 | 在线观看视频亚洲| 欧美一区二区高清在线观看| 午夜久久久久| 国产欧美欧洲在线观看| 亚洲男人的天堂在线aⅴ视频| 亚洲欧美日韩国产一区| 国产精品国产三级国产aⅴ9色| 亚洲网址在线| 久久精品国产亚洲aⅴ| 国产一在线精品一区在线观看| 欧美在线观看一区二区三区| 美女图片一区二区| 91久久久一线二线三线品牌| 欧美精品亚洲| 亚洲香蕉在线观看| 久久蜜桃精品| 亚洲三级毛片| 国产精品美女久久久久久免费| 亚洲综合色在线| 久久久综合免费视频| 在线观看一区视频| 欧美日韩国产精品专区| 亚洲视频一区| 另类亚洲自拍| 亚洲婷婷综合久久一本伊一区| 国产美女精品视频| 久久免费99精品久久久久久| 亚洲激情视频网站| 欧美亚洲综合另类| 在线免费高清一区二区三区| 欧美精品久久天天躁| 亚洲制服少妇| 亚洲国产一区在线| 欧美综合第一页| 亚洲精品免费网站| 国产人成一区二区三区影院| 欧美不卡一卡二卡免费版| 一区二区三区四区国产| 久久只精品国产| 亚洲在线观看视频| 亚洲高清成人| 国产欧美日韩视频一区二区| 欧美成人高清| 欧美在线三级| 一区二区三区av| 欧美成人精品三级在线观看| 亚洲一区二区三区成人在线视频精品 | 亚洲精品一区二区三| 欧美日韩美女在线观看| 欧美一级播放| 一区二区三区你懂的| 欧美大胆成人| 欧美在线视频网站| 99亚洲精品| 影音先锋亚洲电影| 国产精品夜夜嗨| 欧美日本精品| 男女激情视频一区| 欧美有码视频| 亚洲调教视频在线观看| 亚洲欧洲一区二区三区| 欧美成年网站| 免费观看在线综合| 久久一区免费| 久久综合网hezyo|