2015-04-12 16 views
0

我有一個SQLite數據庫和我在讀值回了使用這種循環:轉換的char *變量要uint32_t的用C

int i; 

for(i=0; i<argc; i++) // [0] = IP, [1] = seq, [2] = count 
{ 
    printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); 
} 

if (atoi(argv[2]) > stealthBeta) 
{ 
    confirmSEQ((uint32_t)argv[1]); 
} 

argv[1]的值存儲在數據庫中的UNSIGNED INT和正在寫入到控制檯正確,但是當我打電話的功能,我得到了錯誤的數字。

我試過鑄造它,但它不完全正常工作。從char*uint32_t有什麼正確的方法?

+0

你不能施放此,你需要將其轉換,例如使用'atoi'就像你在你的if語句做。 – wimh

+0

哦,那很簡單oo - 把它當作我想的答案 – Crizly

回答

0

使用atoi()改製爲int

使用(unsigned)atoi()轉換爲unsigned

例如,你的情況:

if (atoi(argv[2]) > stealthBeta) 
{ 
    confirmSEQ((uint32_t)atoi(argv[1])); 
} 
0

要將字符串轉換爲其代表的數字,請使用<stdlib.h>中的strtol()strtoul()strtoul()解析unsigned long,保證至少32位寬。作爲base參數傳遞0允許轉換以0x爲前綴的十六進制表示。以0爲前綴的值將被解析爲八進制,否則解析將以十進制完成。

#include <stdlib.h> 

... 

if (strtol(argv[2], NULL, 0) > stealthBeta) { 
    confirmSEQ((uint32_t)strtoul(argv[1], NULL, 0)); 
}