35 lines
		
	
	
		
			556 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			556 B
		
	
	
	
		
			C
		
	
	
	
	
	
#include "string.h"
 | 
						|
 | 
						|
static int hex(char ch)
 | 
						|
{
 | 
						|
	if ((ch >= '0') && (ch <= '9'))
 | 
						|
		return ch - '0';
 | 
						|
	if ((ch >= 'a') && (ch <= 'f'))
 | 
						|
		return ch - 'a' + 10;
 | 
						|
	if ((ch >= 'A') && (ch <= 'F'))
 | 
						|
		return ch - 'A' + 10;
 | 
						|
	return -1;
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
 * While we find nice hex chars, build a long_val.
 | 
						|
 * Return number of chars processed.
 | 
						|
 */
 | 
						|
int hex2u64(const char *ptr, u64 *long_val)
 | 
						|
{
 | 
						|
	const char *p = ptr;
 | 
						|
	*long_val = 0;
 | 
						|
 | 
						|
	while (*p) {
 | 
						|
		const int hex_val = hex(*p);
 | 
						|
 | 
						|
		if (hex_val < 0)
 | 
						|
			break;
 | 
						|
 | 
						|
		*long_val = (*long_val << 4) | hex_val;
 | 
						|
		p++;
 | 
						|
	}
 | 
						|
 | 
						|
	return p - ptr;
 | 
						|
}
 |