2010-10-10 18 views
5

Ich werde der Erste sein, zuzugeben, ich bin ein C# Typ 100% und C ist nicht für mich. Ich habe jedoch ein Problem. Ich muss 7 mit HashUrl (HashInt) verketten und dann mit HashInt Jede Hilfe würde sehr geschätzt werden.C Concatenate 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; 
} 

Ich sollte die Verwendung von diesem angegeben haben. Es wird tatsächlich in einem Studenten VB6-Projekt verwendet werden.

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

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

Die vollständige Quelle für die C-Bibliothek ist

#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; 
} 

geben "http://www.hello.com" 783.544.359.868 zurückkehren sollte, aber es ist nicht

+0

Sie haben hier mehrere Probleme; Eine davon ist, dass Ihre Funktion ein int, nicht eine Zeichenkette verwendet. Außerdem ist 'main' eine schlechte Wahl für einen Funktionsnamen, wenn Sie es in eine DLL exportieren. – You

Antwort

5

können Sie sprintf Funktion verwenden, um formatierte Strings zu erstellen. Verketten 3 ganze Zahlen in einen String könnte man so etwas wie

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

Ich bin verwenden nicht so toll an C, aber wie würde ich lösen dieses Problem besteht darin, zuerst sie in Zeichen-Arrays zu drehen, dann die verketten. Dann könnten Sie das Ergebnis wieder in einen int drehen:


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; 
} 

Hinweis: keine Garantien auf dieser Arbeits ...