2013年11月13日 星期三

big-endian vs little-endian

名稱來自格列佛遊記中的一場無意義的戰爭
堅持要從大的一頭開蛋的人群叫big-endian
堅持要從小的一頭開蛋的人群叫little-endian

在這裡是指把一串data存入實體記憶體中的方式
不同公司做的CPU會用不同的方式讀取
如果沒有調整,會發生資料傳送正確但無法讀取的錯誤

long data = 0x12345678
                   big-endian               little-endian
0x00000x120x78
0x00010x340x56
0x00020x560x34
0x00030x780x12
Note. 只有1byte時,沒有這個問題
2bytes時,二個byte位置顛倒
4bytes時,會排列為4 3 2 1

2013年11月12日 星期二

組封包的時候,要記得去掉\r\n

//組封包的時候,要記得去掉\r\n,因為windows下的文件,在mac讀取時,可能會多了這些符號

NSString* trimmedBase64String = [_base64String stringByReplacingOccurrencesOfString:@" " withString:@""];
        trimmedBase64String = [trimmedBase64String stringByReplacingOccurrencesOfString:@"\r" withString:@""];

        trimmedBase64String = [trimmedBase64String stringByReplacingOccurrencesOfString:@"\n" withString:@""];

判斷檔案是否存在document中

NSArray *_paths               = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *_documentsDirectory = [_paths objectAtIndex:0];
    NSString *_filePath         = [_documentsDirectory stringByAppendingPathComponent:@"test.jpg"];
    NSData *_fileData             = nil;
    //先檢查檔案是否存在
    NSFileManager *_fileManager = [NSFileManager defaultManager];
    //存在於 Documents ( 一般從 HTTP 下載的檔案都會先另存在 Documents 裡備用 )
    if( [_fileManager fileExistsAtPath:_filePath] )
    {
        //檔案存在document中做這段
    }
    else
    {
        //檔案不存在document中做這段(看到去其他地方找檔案,或是上網下載)
        //存在於 MainBundle  
        _filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@jpg"];
        _fileData = [[NSData alloc] initWithContentsOfFile:_filePath];

    }

2013年11月8日 星期五

NSString的trim方法

NSString *trimmedString = [_base64String stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]];

//完整寫法
NSMutableCharacterSet *set = [[NSMutableCharacterSet alloc] init];
            [set addCharactersInString:@"{"];
            [set addCharactersInString:@"("];
            [set addCharactersInString:@"}"];
            [set addCharactersInString:@")"];
            [set formUnionWithCharacterSet:[NSCharacterSet newlineCharacterSet]];
            

            cell.textLabel.text = [text stringByTrimmingCharactersInSet:set];;

NSString NSData 互轉


//NSString to NSData
NSString* str = @"teststring";
NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding];
//NSData to NSString
NSString* str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

2013年11月7日 星期四

NSData轉成16進制

//Data轉成16進制
-(NSString *)getHexCheckSum:(NSData *)_sourceData
{
    // 16 進制的 Check Sum 算法
    int _checkSum  = 0;
    int _dataLength = _sourceData.length;
    Byte *_bytes = (Byte *)[_sourceData bytes];
    for( int i=0; i<_dataLength; i++ )
        {
             //Force the Byte to Unsigned Byte ( to Scope in 0 ~ 255 ) and Convert to Integer type.
             _checkSum += (int)( _bytes[i]&0xff );
             //_checkSum += _bytes[i];
             }
     return [NSString stringWithFormat:@"%x", _checkSum];

}

面試注意

1, 網路履歷有分為自動媒合跟主動應徵
2, 通常主動應徵的很少,自動媒合的打過去就先跟他說明緣由
3, 告知面試當時是否有額外技能測試
4, 常會約好了不來,所以在面試前再印履歷即可
5, 人來了請他填寫基本資料,即使這次沒有成,也可為公司留下資料庫