2010-10-10 32 views
5

我會第一個承認,我是一個C#人100%,C不適合我。但是我有問題。 我需要連接7與HashUrl(HashInt),然後與HashInt 任何幫助將不勝感激。C連環int

int main(int argc) 
{ 
unsigned int HashInt; 
HashInt = HashURL(argc); 
// I need to return 7 + CheckHash(HashInt) + HashInt but not ADDING, but concanenating them 
return HOWEVERTOGETTHESTRING; 
} 

我應該指定使用這個。它實際上將用於學生VB6項目中。

Private Declare Function main Lib "checksum.dll" (ByVal pStr As String) As Long 

Private Sub Command1_Click() 
MsgBox main("http://hello.com") 
End Sub 

的C庫完整的源代碼是

#include <stdio.h> 
#include <string.h> 
#include <windows.h> 
#include <string.h> 
#include <winreg.h> 
#include <stdlib.h> 

int StrToInt(char *pStr, int Init, int Factor) 
{ 
while (*pStr) { 
Init *= Factor; 
Init += *pStr++; 
} 
return Init; 
} 

int HashURL(char *pStr) 
{ 
unsigned int C1, C2, T1, T2; 

C1 = StrToInt(pStr, 0x1505, 0x21); 
C2 = StrToInt(pStr, 0, 0x1003F); 
C1 >>= 2; 
C1 = ((C1 >> 4) & 0x3FFFFC0) | (C1 & 0x3F); 
C1 = ((C1 >> 4) & 0x3FFC00) | (C1 & 0x3FF); 
C1 = ((C1 >> 4) & 0x3C000) | (C1 & 0x3FFF); 

T1 = (C1 & 0x3C0) << 4; 
T1 |= C1 & 0x3C; 
T1 = (T1 << 2) | (C2 & 0xF0F); 

T2 = (C1 & 0xFFFFC000) << 4; 
T2 |= C1 & 0x3C00; 
T2 = (T2 << 0xA) | (C2 & 0xF0F0000); 

return (T1 | T2); 
} 

char CheckHash(unsigned int HashInt) 
{ 
int Check = 0, Flag = 0; 
int Remainder; 

do { 
Remainder = HashInt % 10; 
HashInt /= 10; 
if (1 == (Flag % 2)){ 
Remainder += Remainder; 
Remainder = (Remainder/10) + (Remainder % 10); 
} 
Check += Remainder; 
Flag ++; 
} while(0 != HashInt); 

Check %= 10; 
if (0 != Check) { 
Check = 10 - Check; 
if (1 == (Flag % 2)) { 
if (1 == (Check % 2)) { 
Check += 9; 
} 
Check >>= 1; 
} 
} 
Check += 0x30; 
return Check; 
} 

int main(int argc) 
{ 
unsigned int HashInt; 
    int result; 
    HashInt = HashURL(argc); 
    char temp[100]; 
    sprintf(temp, "7%i%j", CheckHash(HashInt), HashInt); 
    result = atoi(temp); 
    return result; 
} 

給予 「http://www.hello.com」 應該返回783544359868,但它不是

+0

你這裏有幾個問題;其中之一就是你的函數是一個int,而不是一個字符串。此外,如果將函數名稱導出到DLL中,'main'對於函數名稱來說是一個糟糕的選擇。 – You 2010-10-11 00:10:13

回答

5

您可以使用sprintf函數創建格式化的字符串。要連接3個整數轉換成字符串,你可以使用類似

sprintf(string, "%d%d%d", int1, int2, int3) 
1

我不是所有的偉大的C,但這個問題是我會怎樣解決,首先把他們變成字符數組,然後串聯這些。然後,你可以把結果返回到一個int:


int main(int argc) { 
    unsigned int HashInt; 
    int result; 
    HashInt = HashURL(argc); 
    char temp[50]; 
    sprintf(temp, "7%i%i", CheckHash(HashInt), HashInt); 
    result = atoi(temp); 
    return result; 
} 

注:這方面的工作沒有保證......