2010-10-10 15 views
5

Seré el primero en admitir que soy un tipo C# 100% y C no es para mí. Sin embargo, tengo un problema. Necesito concatenar 7 con HashUrl (HashInt) y luego con HashInt Cualquier ayuda sería muy apreciada.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; 
} 

Debí haber especificado el uso de esto. En realidad va a ser utilizado en un proyecto de estudiantes 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 

La fuente completo para la biblioteca C es

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

dar "http://www.hello.com" deberían volver 783544359868 pero no es

+0

Usted tiene varios problemas aquí; uno de ellos es que su función está tomando una int, no una cadena. Además, 'main' es una opción pobre para un nombre de función si lo está exportando en una DLL. – You

Respuesta

5

Puede utilizar la función sprintf para crear cadenas de formato. Para concatenar 3 enteros en una cadena que podría utilizar algo como

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

que no soy tan bueno en C, pero cómo iba a resolver este problema es que los convierten primero en matrices de caracteres, a continuación, concatenar los. Posteriormente, se podría convertir el resultado en un 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; 
} 

Nota: No hay garantías en este trabajo ...